Passport.js:passport-facebook-token策略,通过JS SDKlogin,然后validation护照?

我正在寻找一种方法让我的客户端与Facebook的JS SDK授权,然后以某种方式将此授权转移到我的节点服务器(所以它可以validation与fbgraphicsAPI的请求)

我偶然发现: https : //github.com/jaredhanson/passport-facebook/issues/26

https://github.com/drudge/passport-facebook-token

护照-Facebook似乎是一个完全不同的策略。

当我假设:

一个使用fb JS SDKlogin,然后facebook-token策略以某种方式从文档或正文对象中提取令牌和fb id?

或者有没有其他体面的方式来实现这一目标? 我试图避免由服务器SDK强制实施的redirect

本周我花了几天的时间试图找出使用Facebook身份validation的最佳方式,使用passport.js – passport-facebook-token是完美的。

假设这些是两个单独的身份validation策略,您是正确的。 你不需要安装passport-facebook来使用passport-facebook-token。

如果您在客户端JS(或iOS等)中实现了Facebook身份validation,并且正在寻找一种方法来使用您的用户的Facebook authTokenvalidationAPI请求,那么passport-facebook-token是一个非常优雅的解决scheme。

passport-facebook-token完全独立于passport-facebook,在将请求传递给控制器​​之前,基本上会处理Facebook内部所需的redirect。

因此,要使用passport-facebook-token来validationAPI路由,您需要设置如下的护照策略:

passport.use('facebook-token', new FacebookTokenStrategy({ clientID : "123-your-app-id", clientSecret : "ssshhhhhhhhh" }, function(accessToken, refreshToken, profile, done) { // console.log(profile); var user = { 'email': profile.emails[0].value, 'name' : profile.name.givenName + ' ' + profile.name.familyName, 'id' : profile.id, 'token': accessToken } // You can perform any necessary actions with your user at this point, // eg internal verification against a users table, // creating new user entries, etc. return done(null, user); // the user object we just made gets passed to the route's controller as `req.user` } )); 

值得注意的是,在passport-facebook-token Readme中使用的User.findOrCreate方法不是默认的mongo / mongoose方法,而是一个插件,如果需要的话,您必须安装它。

要将此身份validation策略用作任何路由的中间件,您需要将它作为URL参数或作为请求主体的属性传递给access_token对象。

 app.get('/my/api/:access_token/endpoint', passport.authenticate(['facebook-token','other-strategies']), function (req, res) { if (req.user){ //you're authenticated! return sensitive secret information here. res.send(200, {'secrets':['array','of','top','secret','information']}); } else { // not authenticated. go away. res.send(401) } } 

NB。 access_token属性区分大小写并使用下划线。 passport-facebook-token的文档不是很广泛,但是源代码很好评,很容易阅读,所以我build议你看一看。 当然,这帮助我围绕一些更普遍的护照工作方式。