facebook - Passport.js如何使用OAuth2策略获取Profile数据?

标签 facebook oauth passport.js

example Passport 存储库中 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);
    });
  }
));

Passport如何获取profile字段? oauth 端点是否为其提供了 token ?或者它来自单独的(与 session 相关的)请求?

例如,当使用 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

关于facebook - Passport.js如何使用OAuth2策略获取Profile数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895077/

相关文章:

html - 移动网站上的 Facebook URL 方案,如果已安装则打开应用程序,否则转到网页

javascript - 防止阻止使用 Facebook SDK 出现的弹出窗口

ios - Google OAuth 2.0 invalid_request,缺少方案

java - 使用证书中的 pub key 进行 Spring Boot Oauth2 访问 token 验证

javascript - 如何在 Nestjs 中刷新 token

node.js - 使用 node-oauth 和通行证对 Twitter API 进行授权调用

iphone - iOS facebook 检查好友是否安装了应用

android - Stetho:Chrome 开发工具中的 Facebook 调试不工作

ruby-on-rails - 需要 Twitter 和 Facebook Gems 的推荐

node.js - Discord OAuth2 使用 koa 登录