如何在使用Passport.js facebook策略进行身份验证后使用Facebook Graph API?

时间:2015-02-09 07:56:10

标签: javascript node.js facebook-javascript-sdk passport.js passport-facebook

我使用Facebook策略验证了我的用户并获得了他们的用户信息。我的应用程序现在需要在Facebook上点击其他图形api端点。我没有看到访问工具的方法来向Facebook图形api发送请求。在进一步检查策略之后,我发现一切都是围绕OAuth 2策略构建的。

1)如何使用facebook策略调用其他图形api端点?

2)我是否应该在某个地方钻进护照api以访问相关的oauth对象以实现此目的?

或者我在考虑这个错误,我应该获取用户的访问令牌并使用另一个第三方库来查询facebook api?

2 个答案:

答案 0 :(得分:2)

后者,你只需要访问令牌然后你可以发送一个普通的请求与vanilla或你喜欢的每个lib(我个人喜欢破坏)。

那将是这样的:

Wreck.get('https://graph.facebook.com/me?access_token=' + access_token, function(err, res, payload) { });

答案 1 :(得分:0)

使用'passport-facebook'策略:

accessToken 与个人资料一起返回。

假设您已设置以下内容:

// .: Passport Strategy :.
const Strategy = require('passport-facebook').Strategy;
passport.use(new Strategy({
  clientID:"IDxxxxxxxxxxxxxxxxxxx",
  clientSecret:"SECRETxxxxxxxxxxxxxxxxxxx",
  profileFields: ['id', 'displayName', 'name', 'picture.type(large)', 'emails'],
  callbackURL:"http://localhost:1337/login/facebook/return"
 }, FacebookAccess )
)
function FacebookAccess(accessToken, refreshToken, profile, cb){
  // accessToken  : valid FB.GraphAPI token
  // refreshToken : undefined for Facebook
  profile.token = accessToken
  return cb(null, profile);
}

令牌包含在 profile 对象中,该对象传递给 您决定的 passport.serializeUser 功能,例如:

passport.serializeUser(function(user, cb){
  var platform_user = {
    fbid:user.id,
    name:user.displayName,
    mail:user.emails[0].value,
    token:user.token,
    avtr:user.photos[0].value
  }
  cb(null, platform_user)
})