我有一个Sails JS应用程序。我正在尝试使用Passport.js身份验证层sails-generate-auth设置身份验证。我按照文档中给出的步骤配置了我的应用程序。
但是当我抬起我的风帆应用程序时,身份验证无效。我可以访问控制器,即使我没有登录(它没有重定向到我的登录页面)。
我在console.log
中添加了api/policies/passport.js
语句,如下所示:
module.exports = function (req, res, next) {
passport.initialize()(req, res, function () {
passport.session()(req, res, function () {
res.locals.user = req.user;
console.log(req.user); // added by me
next();
});
});
};
现在,当我在登录前或登出后访问控制器时,打印undefined
。但是当我登录时,它会打印我的用户数据。知道为什么不检查身份验证吗?
我正在使用本地身份验证策略,我已经注释掉了所有其他策略(twitter,facebook ...)
答案 0 :(得分:12)
以上答案提供了有用的信息。我想详细说明一下。
sails-generate-auth,默认情况下,如果用户未登录,则不会拒绝访问控制器。为此,您可以在api/policies/
中创建另一个策略。例如:创建sessionAuth
政策,如下所示:
module.exports = function(req, res, next) {
if (req.user) {
return next();
}
return res.forbidden('You are not permitted to perform this action.');
};
您也可以渲染登录页面,而不是显示禁止的页面。为此,您需要访问AuthController.login。因此,请在config/policies
中添加以下政策:
'*': ['passport', 'sessionAuth'],
'auth': {
'*': ['passport']
}
这有助于限制访问除auth控制器之外的所有控制器,例如登录,注销和注册,如果用户未登录。
答案 1 :(得分:6)
Passport没有拒绝访问控制器的策略。为此,您必须创建另一个策略。
有关详细信息,请参阅此link。