3

おそらく明白で単純です。Facebookユーザーの友達情報にアクセスする必要があるアプリケーションがあります。PassportJSを使用してユーザーが認証され、アプリケーションがアクセストークンを受け取った後、ユーザーの友達情報を取得するにはどうすればよいですか?または、保護されている情報はありますか?そして、ユーザーの友達がアクセスするためのスコープパラメータは何ですか?

編集: 元の質問は実際には答えられなかったことに言及したいのですが、答えは私が調査を続けるのに十分でした。

私の解決策は、ログインフローの管理にPassportJSを使用することでした。アクセストークンを受け取ったら、FacebookGraphAPI呼び出しに使用します。これは非常に簡単です。このためにモジュールを少し作り直し、GitHubに公開してそのまま使用します。

4

1 に答える 1

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 が提供する生の出力を確認し、カスタム スコープ変数が存在することを確認するのに役立ちます。

于 2012-11-13T16:04:59.100 に答える