【问题标题】:Passport authentication not working in sails.js application护照身份验证在sails.js 应用程序中不起作用
【发布时间】:2015-01-25 21:46:16
【问题描述】:

我有一个 Sails JS 应用程序。我正在尝试使用 Passport.js 身份验证层 sails-generate-auth 设置身份验证。我已经按照他们文档中给出的步骤配置了我的应用程序。

但是当我启动我的风帆应用程序时,身份验证不起作用。我可以访问控制器,即使我没有登录(它不会重定向到我的登录页面)。

我在api/policies/passport.js中添加了console.log语句如下:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    查看link了解更多详情。

    【讨论】:

      【解决方案2】:

      以上答案提供了有用的信息。我想详细说明一下。

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

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

      【讨论】:

      • 我已经对配置/策略进行了上述更改。即使在成功登录后(通过 Postman 打包的应用程序,它似乎保留了相关的 cookie),我的控制器(例如,GET /user)现在也收到 401 错误。当我运行节点调试器时,在 sessionAuth 策略上,我发现 req.session 存在(使用当前用户的 ID)但 req.session.authenticated 从未设置,因此身份验证失败。
      • 如果您使用的是sails-generate-auth,目前该模块不支持API认证。我已经提出了一个拉取请求来添加它。但是你可以通过这个even-more-passport来了解如何集成API认证。如果您有任何问题,请在此处提出问题。它由我维护,我一定会帮助你。
      猜你喜欢
      • 2013-12-28
      • 2015-08-21
      • 2013-06-25
      • 2016-10-29
      • 2017-03-06
      • 2018-04-29
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多