我试图在我的登录系统中实施CAS,但我仍然坚持如何检索"票#34;。基本上,票证作为参数在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'
});
}
}
如果验证通过正文将有两行:
yes
username
如果验证没有通过,HTML将只显示一行:
no
如何解析显示的HTML页面的每一行?
答案 0 :(得分:2)
您需要创建索引路径,将其指向控制器操作,然后在该操作中检索令牌。例如,在/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);
}
假设您在服务器上正确设置了SSL, https://localhost:1337/
将指向该代码!