gpt4 book ai didi

node.js - Passport.js:passport-facebook-token 策略,通过 JS SDK 登录然后验证 Passport ?

转载 作者:IT老高 更新时间:2023-10-28 22:06:35 29 4
gpt4 key购买 nike

我正在寻找一种方法让我的客户端使用 facebook JS SDK 进行授权,然后以某种方式将此授权传输到我的 Node 服务器(以便它可以使用 fb graph api 验证请求)

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

&

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

这似乎是与 Passport -facebook 完全不同的策略。

我的假设是否正确:

使用 fb JS SDK 登录,然后 facebook-token 策略以某种方式从文档或正文对象中提取 token 和 fb id?

或者有没有其他体面的方法来实现这一点?我试图避免服务器 SDK 强制执行的重定向

最佳答案

这周我花了几天时间试图找出将 Facebook 身份验证用于私有(private) API 的最佳方法,使用 passport.js — passport-facebook-token 非常适合。

您认为这是两种不同的身份验证策略是正确的。您不需要安装 passport-facebook 即可使用 passport-facebook-token。

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

passport-facebook-token 完全独立于 passport-facebook,基本上在内部处理 Facebook 所需的重定向,然后将请求传递给您的 Controller 。

因此,要使用 passport-facebook-token 验证 API 路由,您需要像这样设置 Passport 策略:

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`
}
));

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

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

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 属性区分大小写并使用下划线。passport-facebook-token 的文档并不广泛,但源代码的评论非常好,而且很容易阅读,所以我鼓励你去看看那里的引擎盖。它确实帮助我了解了 Passport 工作的一些更一般的方式。

关于node.js - Passport.js:passport-facebook-token 策略,通过 JS SDK 登录然后验证 Passport ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929092/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com