我一直在寻找一种让我的客户使用facebook JS SDK授权的方法,然后以某种方式将此授权转移到我的节点服务器(以便它可以使用fb graph api验证请求)
我偶然发现了:https : //github.com/jaredhanson/passport- facebook/issues/26
和
https://github.com/drudge/passport-facebook- token
这似乎与护照-脸书完全不同
我假设是正确的:
一个人使用fb JS SDK登录,然后facebook-token令牌策略以某种方式从文档或主体对象中提取了令牌和fb id?
还是有其他合适的方法来实现这一目标?我就是想避免服务器SDK强制执行的重定向
我本周花了几天时间,试图找出使用私有密码的Facebook身份验证的最佳方法,即使用passport.js-护照-facebook-令牌非常适合此操作。
您以为这是两种单独的身份验证策略是正确的。您不需要安装password-facebook即可使用passport-facebook-token。
如果您在客户端JS(或iOS等)中实现了Facebook身份验证,并且正在寻找一种使用用户的Facebook authToken对API请求进行身份验证的方法,那么passport-facebook-token是一个非常好的解决方案。
Passport-facebook-token的工作原理完全独立于password- facebook,并且在将请求传递给您的控制器之前,基本上处理了Facebook内部所需的重定向。
因此,要使用passport-facebook-token对API路由进行身份验证,您需要按照以下方式设置护照策略:
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, // e.g. 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` } ));
值得注意的是,User.findOrCreatepassword-facebook-token-token自述文件中使用的方法不是默认的mongo / mongoose方法,而是一个您必须安装的插件。
User.findOrCreate
要将此身份验证策略用作任何路由的中间件,您需要将其access_token作为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) } }
注意 该access_token属性区分大小写并使用下划线。护照-facebook- 令牌的文档并不广泛,但是源代码确实经过了很好的注释并且非常易于阅读,因此,我建议您在此处进行深入了解。当然,这可以帮助我为护照的一些更一般的使用方法所用。