我有一个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 ...)
以上答案提供了有用的信息.我想详细说明一下.
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控制器之外的所有控制器,如登录,注销和注册,如果用户未登录.
Passport没有拒绝访问控制器的策略.为此,您必须创建另一个策略.
有关详细信息,请参阅此链接.