2013-12-23 59 views
31

使用Passport.js有没有办法让我为相同的路由指定多个身份验证提供程序?passport.js与多个身份验证提供程序?

例如(从护照指南)我可以在下面的示例路线上使用本地和Facebook和Twitter策略?

app.post('/login', 
    passport.authenticate('local'), /* how can I add other strategies here? */ 
    function(req, res) { 
    // If this function gets called, authentication was successful. 
    // `req.user` contains the authenticated user. 
    res.redirect('/users/' + req.user.username); 
    }); 
+0

你为什么希望多策略混合成一条路由后? – damphat

回答

52

护照的中间件是建立在一个方式,让您在一个passport.authenticate(...)调用中使用多种策略。

但是,它是用OR顺序定义的。这就是说,如果没有一种策略能够成功,它将会失败。

这是你将如何使用它:

app.post('/login', 
    passport.authenticate(['local', 'basic', 'passport-google-oauth']), /* this is how */ 
    function(req, res) { 
     // If this function gets called, authentication was successful. 
     // `req.user` contains the authenticated user. 
     res.redirect('/users/' + req.user.username); 
}); 

换句话说,顺便用它,是传递一个包含你希望用户进行身份验证策略的名称的数组。

此外,不要忘记以前设置你想实施的策略。

可以确认以下github上的文件这个信息:

Authenticate using either basic or digest in multi-auth example.

Passport's authenticate.js definition

+0

非常好!感谢您的帮助,这正是我一直在寻找的! – cgiacomi

+1

如何判断最终用于认证用户的认证策略?我当然可以为每个策略使用不同的端点,但我试图避免它。 –

+0

@asafam据我记忆,req.user保存登录策略使用的信息。将不得不检查tho ....会话中使用的大部分信息(后)保存在req对象 –

相关问题