如果您查看passport oauth2 strategy,您在此处描述的内容:
我想知道passport js中是否有接受授权码并返回token的函数
由护照办理。鉴于链接1 中的示例,您应该对策略进行以下配置:
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, cb) {
// Do whatever here with the profile
}
));
callbackURL 是您正在寻找的“功能”。让我解释一下:
OAuth2 规范(我假设您使用的是Authorization Code Grant 流程)指出用户被重定向到身份提供者(authorizationURL)。然后,身份提供者会提示用户输入她的凭据,一旦通过身份验证,身份提供者会将用户连同代码一起发送回您的应用程序。此代码应由与 callbackURL 端点链接的回调方法处理。在他们的例子中是这样描述的:
app.get('/auth/example/callback',
passport.authenticate('oauth2', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
策略中定义的回调应该管理您想要实现的目标。
如果这不符合您的需求,您可以随时进行猴子修补:) 这是一个您可以尝试的示例:
'use strict';
var OAuth2 = require('oauth').OAuth2;
function getTokenFromCode (code, clientID, clientSecret, authorizationURL, tokenURL) {
return () => {
var oAuth2 = new OAuth2(clientID, config.clientSecret,
'', config.authorizationURL, config.tokenURL);
var _getOAuthAccessToken = oAuth2.getOAuthAccessToken;
oAuth2.getOAuthAccessToken = (code, params, callback) => {
if (responseType) {
params.response_type = responseType;
}
_getOAuthAccessToken.call(oAuth2, code, params, callback);
};
return oAuth2;
};
}
这段代码的作用如下:
- 实例化一个 OAuth2 对象并使用所需的配置对其进行初始化
- Monkey 用我们的东西修补
getOAuthAccessToken 方法
- 在我们的实现中,我们接收代码并获取访问令牌和刷新令牌。
您还可以提供回调并执行它,而不是返回 OAuth2 对象。