我有一个使用Node + Express + Passport构建的后端REST API,我正在尝试使用google访问令牌进行身份验证。我正在使用this strategy.
我已经查看了github上的软件包文档和问题,但没有解决问题的方法。
我已经验证了访问令牌:
https://www.googleapis.com/oauth2/v1/tokeninfo?idToken
带有令牌令牌和带有访问令牌的https://www.googleapis.com/oauth2/v1/tokeninfo?acessToken
,两者都有效,但都不起作用。我有双三重检查,我在后端使用正确的clientID和秘密,在前端我从中获取令牌。
这是相关的代码:
app.use(passport.initialize());
passport.use(
new GoogleTokenStrategy(
{
clientID: config.get('google.clientID'),
clientSecret: config.get('google.clientSecret')
},
function(accessToken, refreshToken, profile, done) {
console.log(accessToken, refreshToken, profile, done)
User.findOrCreate({ googleId: profile.id }, function(err, user) {
return done(err, user);
});
}
)
);
app.use('/user', passport.authenticate('google-token'), userRoute);
我在顶部导入如下:
const passport = require('passport');
const GoogleTokenStrategy = require('passport-google-token').Strategy;
该应用程序不会抛出任何错误。
我添加了创建策略的console.log - 当我从邮递员开火时,没有记录。当我从一个角度前端射击时 - 它记录数据并且它正在发射。
在我的情况下,由于我甚至没有定义的User.findOrCreate逻辑,这被抛出。因此,Facebook令牌护照包会引发内部服务器错误,但谷歌会在没有消息的情况下无声地失败。
我将在开发过程中稍后定义我的findOrCreate逻辑。目前,这适用于测试:
new GoogleTokenStrategy(
{
clientID: config.get('google.clientID'),
clientSecret: config.get('google.clientSecret')
},
function(accessToken, refreshToken, profile, done) {
return done(null, profile);
}
)
);