2014-11-04 74 views
1

我是SailsJS的新手,我想问专家的意见,我的实施是否可以。在SailsJS的passport authentication package的帮助下,我能够获得某种认证。Sails JS护照认证制作策略层无用?

/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的正确方式吗?纠正我,如果我错了,我想我绝对是。

回答

0

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

看看这个项目,看看它是如何做:

Sails Social Auth

+0

我想用由kasperisager提供的包,因为它具有“魔力”它将所有登录方法(通过社交)捆绑在一起并保留单个用户标识。 – holyxiaoxin 2014-11-04 08:55:25

+0

对不起。没有关于这个特定的npm包的线索。为什么不尝试在Github回购中提出问题? – amarprabhu 2014-11-08 09:16:53

1

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

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

(并删除你的控制器中的“*”的方法)。然后,您可以指定“isAuthenticated”作为一项政策在配置/ policies.js文件,并从那里,而不是控制访问:

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