Sails JS护照认证使策略层变得无用



我是SailsJS的新手,我想征求专家意见我的实现是否可以。在SailsJS护照身份验证包的帮助下,我能够进行某种身份验证。

/controller/members.js:

module.exports = { 
  //deny all non authenticated users from accessing this controller
  '*':function(req,res,next){
    if(!req.user){
      res.view(403);
    }else{
      next();
    }
  },
  //once user is authenticated through passport, it is redirected here
  'welcome':function(req,res){
    res.view();
  },
  //when user clicks logout
  'logout':function(req,res){
   req.logout();
   res.redirect("/login");
  },
};

但是,正如您从中看到的,enter策略是在控制器本身中编码的。我根本没有使用政策。那么在包的帮助下,SailsJS中的策略层就完全没用了?这是实现passportJS的正确方法吗?如果我错了,请纠正我,我想我肯定错了。

您应该能够使用策略来实现上述功能。如果您创建了一个名为isAuthenticated.js的策略,则可以将您的规则从控制器移动到其中:

module.exports = function(req, res, next) {
  if(!req.user){
    res.view(403);
  } else {
    next();
  }
};

(并从控制器中删除"*"方法)。然后,您可以在config/policies.js文件中将"isAuthenticated"指定为策略,并从那里控制访问:

module.exports.policies = {
  members: {
    '*':      'isAuthenticated',
    'welcome': true,
    'logout':  true
  }
}

要在使用passport实现身份验证时使用策略,必须将它们配置为express中间件(在config/express.js中),而不是将它们添加为控制器。

看看这个项目,看看它是如何完成的:

Sails Social Auth

最新更新