Passport.js如何使用OAuth2策略获取个人资料数据



在护照存储库中的oauth2策略使用示例中,提供了以下函数:

passport.use(new OAuth2Strategy({
    authorizationURL: 'https://www.example.com/oauth2/authorize',
    tokenURL: 'https://www.example.com/oauth2/token',
    clientID: EXAMPLE_CLIENT_ID,
    clientSecret: EXAMPLE_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/example/callback"
  },
  function(accessToken, refreshToken, profile, done) {
    User.findOrCreate({ exampleId: profile.id }, function (err, user) {
      return done(err, user);
    });
  }
));

护照如何获取profile字段? 它是否由 OAuth 终结点提供令牌? 还是来自单独的(与会话相关的)请求?

例如,当使用Facebook的oauth API时,用户信息会自动加载Passport的Facebook策略,所以我试图弄清楚这是如何发生的,以及如何在自定义oauth2 API中实现类似的行为。

用户配置文件通常在成功检索access_token后加载:

https://github.com/jaredhanson/passport-oauth2/blob/master/lib/strategy.js#L175

 this._oauth2.getOAuthAccessToken(code, { grant_type: 'authorization_code', redirect_uri: callbackURL  },
      function(err, accessToken, refreshToken, params) {
        if (err) { return self.error(self._createOAuthError('Failed to obtain access token', err)); }
        self._loadUserProfile(accessToken, function(err, profile) {
          if (err) { return self.error(err); }

实际获取用户信息的功能通常由特定策略(例如Facebook,Twitter等)提供

在Facebook的实现中:

https://github.com/jaredhanson/passport-facebook/blob/master/lib/strategy.js#L137

最新更新