2012-11-01 58 views
3

可能明显和简单,当互动。我有一个应用程序,应该访问一个Facebook用户的朋友信息。当用户已经使用PassportJS验证和我的应用程序接收到的accessToken我怎么获取用户的好友信息?或者任何受保护的信息是?用户朋友访问的范围参数是什么?如何与Facebook图形API使用PassportJS

编辑: 只是想提一下,原来的问题没有真正回答,但答案足以让我继续我的调查。

我的解决办法是使用PassportJS管理的登录流程,当我收到的accessToken我用它为我的Facebook图形API调用,这是非常容易做到的。我将尽我的模块上一些返工这个并将其发布在GitHub上被用作是。

+0

能否请您分享一下如何正在图形API调用? –

回答

1

为了修改的范围,你这样做,当你设置你的Facebook的战略路线。

例如,如果我想用户的电子邮件是我的范围的一部分,该矿将如下所示:

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

我救了我的信息的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(配置文件),像这样:

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

,以帮助你看到原始输出Facebook API给你的东西,并检查你的自定义范围变量是否存在。

+0

我看不到回答的最初问题@scott –

+0

完全同意此答案超出范围。 – jvmvik