我正在尝试将 CAS 实现到我的登录系统中,但我不知道如何检索“票据”。基本上,票证作为参数在 URL 中返回,但我不知道如何解析它。
这是我尝试的代码:
login: function(req, res) {
if (req.session.authenticated) {
res.redirect('/dashboard');
} else {
var https = require('https');
var url = require('url');
var cas_url = 'https://auth-test.test.edu';
var login_service = '/cas/login';
var validation_service = '/cas/validate';
var service = 'https://localhost:1337';
res.redirect(cas_url + login_service + '?service=' + service);
console.log(req.headers);
}
}
重定向到我指定的 URL 后,CAS 服务器重定向回(带有示例票证):
https://localhost:1337/?ticket=ST-10247-Qn0BuiSHob1dxcjODDku-cas-t1
关于如何优化我的代码或以某种方式检索票证有什么想法吗?谢谢!
编辑: 如需立即验证,请参阅下面对所选答案的评论:
index: function(req, res) {
var ticket = req.param('ticket');
if (req.session.authenticated) {
res.redirect('/dashboard');
} else if (ticket) {
var https = require('https');
var options = {
cas_url: 'https://auth-test.berkeley.edu',
login: '/cas/login',
validate: '/cas/validate',
service: 'http://localhost:1337'
};
// redirect to validate URL
res.redirect(options.cas_url + options.validate
+ '?service=' + options.service + '&ticket=' + ticket);
} else {
res.view({
title: 'Home'
});
}
}
如果验证通过,body中会有两行:
是
用户名
如果验证不通过,HTML将只显示一行:
没有
如何解析显示的 HTML 页面的每一行?
最佳答案
您需要创建一个索引路由,将其指向 Controller 操作,并检索该操作中的 token 。例如,在 /config/routes.js
中,添加:
'/': 'HomeController.index'
然后在/api/controllers/HomeController
中:
index: function (req, res) {
// req.param will contain any route params, body params or
// query string params
var ticket = req.param('ticket');
return res.send("The ticket is: " + ticket);
}
https://localhost:1337/
然后将指向该代码,假设您在服务器上正确设置了 SSL!
关于javascript - Sails.js:重定向后检索 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628089/