10

我有一个 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. 但是当我登录时,它会打印我的用户数据。知道为什么它不检查身份验证吗?

我正在使用本地身份验证策略,并且我已经注释掉了所有其他策略(推特、脸书……)

4

2 回答 2

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']
}

如果用户未登录,这有助于限制除身份验证控制器(例如登录、注销和注册)之外的所有控制器的访问。

于 2014-11-28T06:18:15.023 回答
6

Passport 没有拒绝访问控制器的策略。为此,您必须创建另一个策略。

有关更多详细信息,请参阅此链接

于 2014-11-28T05:08:02.710 回答