在 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/