【问题标题】:How to interact with Facebook Graph API when using PassportJS使用 PassportJS 时如何与 Facebook Graph API 交互
【发布时间】:2012-10-22 13:36:12
【问题描述】:

可能很明显和简单。我有一个应用程序应该访问 Facebook 用户的朋友信息。在使用 PassportJS 对用户进行身份验证并且我的应用程序收到 accesstoken 后,我如何获取用户的朋友信息?或者任何受保护的信息?用户好友访问的范围参数是什么?

编辑: 只想提一下,最初的问题并没有真正得到解答,但答案足以让我继续调查。

我的解决方案是使用 PassportJS 来管理登录流程,当我收到 accessToken 时,我将它用于我的 Facebook Graph API 调用,这非常容易做到。我将为此对我的模块进行一些返工,并将其发布到 GitHub 上以按原样使用。

【问题讨论】:

  • 你能分享一下如何进行graph api调用吗?

标签: facebook facebook-graph-api express passport.js


【解决方案1】:

为了修改范围,您在为 Facebook 策略设置路线时执行此操作。

例如,如果我希望用户的电子邮件成为我范围的一部分,我的电子邮件将如下所示:

app.get('/auth/facebook', passport.authenticate('facebook',  { scope: 'email' }));
app.get('/auth/facebook/callback',
  passport.authenticate('facebook', { successRedirect: '/',
                                      failureRedirect: '/' }));

我正在使用 Mongoose 将我的信息保存到 MongoDB,但您可以轻松地将他们的朋友粘贴到 req.user 中。以下是我如何映射 Facebook 用户数据的示例:

passport.use(new FacebookStrategy({
    clientID: Common.conf.fb.appId,
    clientSecret: Common.conf.fb.appSecret,
    callbackURL: Common.conf.site_url + "/auth/facebook/callback"
  },
  function(accessToken, refreshToken, profile, done) {
    Model.User.findOne({uid: profile.id}, function(err, user) {
      if (err) { return done(err); }
      if (user) { done(null, user); } else {
        var user_data = {
          provider:   profile.provider
          , alias:  profile.username
          , email:      profile.emails[0].value
          , uid:      profile.id
          , created:  new Date().getTime()
          , name: {
            first:  profile.name.givenName
            , last: profile.name.familyName
          }
          , alerts: {
            email:      true
            , mobile:   false
            , features: true
          }
        };
        new Model.User(user_data).save(function(err, user) {
          if(err) { throw err; }
          done(null, user);
        });
      }
    });
  }
));

有时像这样放置一个 console.log(profile) 会很有帮助:

   function(accessToken, refreshToken, profile, done) {
        console.log(profile);

为了帮助您查看 Facebook API 提供给您的原始输出并检查您的自定义范围变量是否存在。

【讨论】:

  • 我没有看到原始问题的答案@scott
猜你喜欢
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2012-05-12
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多