Passport身份验证在sails.js应用程序中不起作用

时间:2014-11-27 10:23:45

标签: node.js authentication sails.js passport.js passport-local

我有一个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 ...)

2 个答案:

答案 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