Yed*_*nan 10 authentication node.js sails.js passport-local passport.js
我有一个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();
});
});
};
Run Code Online (Sandbox Code Playgroud)
现在,当我在登录前或登出后访问控制器时,它的打印undefined.但是当我登录时,它会打印我的用户数据.知道为什么不检查身份验证吗?
我正在使用本地身份验证策略,我已经注释掉了所有其他(twitter,facebook ...)
Yed*_*nan 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.');
};
Run Code Online (Sandbox Code Playgroud)
您也可以渲染登录页面,而不是显示禁止的页面.为此,您需要访问AuthController.login.因此,请config/policies按以下方式添加策略:
'*': ['passport', 'sessionAuth'],
'auth': {
'*': ['passport']
}
Run Code Online (Sandbox Code Playgroud)
这有助于限制访问除auth控制器之外的所有控制器,如登录,注销和注册,如果用户未登录.