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

时间:2014-11-04 08:01:37

标签: sails.js passport.js

我是SailsJS的新手,我想询问专家意见我的实施是否合适。在SailsJS passport authentication package的帮助下,我能够进行某种身份验证。

/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");
  },
};

但是,正如您所看到的,输入策略是在控制器本身内编码的。我根本没有使用政策。所以在包的帮助下,SailsJS中的策略层完全没用?这是实施passportJS的正确方法吗?如果我错了,请纠正我,我认为我绝对是。

2 个答案:

答案 0 :(得分:1)

您应该能够使用策略来实现上述内容。如果您创建一个名为 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
  }
}

答案 1 :(得分:0)

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

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

Sails Social Auth