我已经查看了多个类似的问题,其中回调在护照中不起作用,但我似乎无法解决我的具体情况。
passport.use(new OAuth2Strategy({
authorizationURL: 'http://localhost:3001/oauth2/authorize',
tokenURL: 'http://localhost:3001/oauth2/token',
clientID: 'ID',
clientSecret: 'secret',
passReqToCallback: true
},
function (accessToken, refreshToken, profile, cb) {
//This never happens
User.findOrCreate({ exampleId: profile.id }, function (err, user) {
return cb(err, user);
});
}
))
我也尝试过直接在路由器中完成
app.get('/test', passport.authenticate('oauth2', { failureRedirect: '/login' },
(err, user, info) => {
console.log("Something work please");
}),
(req, res) => {
res.send("OK");
}
所有这些都不会触发。发生什么情况是passport.authenticate会立即返回配置文件。是不是应该将结果返回给回调(我尝试使用的任何结果)?
这是个人资料对象供参考
{
"_id": "<ID>",
"accessToken": "<AccessToken>",
"accessTokenExpiresAt": "2019-11-18T21:39:20.994Z",
"refreshToken": "<RefresToken>",
"refreshTokenExpiresAt": "2019-12-02T20:39:20.994Z",
"client": {
"id": "ClientID"
},
"user": {
"username": "<username>"
},
"__v": 0
已验证它是否达到了此特定端点?是 提供程序服务器工作?是 其他没有护照的端点吗?是的
编辑:我当时在想它会进行API调用,但是它似乎想重定向请求,因此OAuth2服务器的响应将直接返回给客户端,而不是触发回调。
答案 0 :(得分:0)
确保您已告知您的应用在您的路线上使用护照策略。
app.use('/test', passport.authenticate('oauth2', {session: false}));
编辑:另外,检查它是否将通过正确的cb函数返回。这是我的查找和更新功能的示例。
passport.use('oauth2', new OAuth2Strategy({
authorizationURL: 'http://localhost:3001/oauth2/authorize',
tokenURL: 'http://localhost:3001/oauth2/token',
clientID: 'ID',
clientSecret: 'secret',
passReqToCallback: true
},
async (accessToken, refreshToken, profile, cb) => {
try {
var user = await User.findOne({
where: {
id: profile.id
}
})
if (user) {
console.log('user found');
await user.update({
// update user if needed
})
}
return cb(null, user);
}
catch (error) {
console.log(error)
return cb(error, false, error.message);
}
}));