我尝试通过Android应用发送的Google令牌对用户进行身份验证。我使用node.js和passport。
var GoogleTokenStrategy = require('passport-google-id-token');
var passport = require('passport');
var User = require('./models/usersModel.js');
module.exports = function(app) {
passport.use(new GoogleTokenStrategy({
clientID: "here-is-my-client-id.apps.googleusercontent.com"
},
function(parsedToken, googleId, done) {
User.findOrCreate({ googleId: googleId }, function (err, user) {
if(err) {
return done(err);
}
if(!user) {
user = new User({
username: googleId
});
user.save(function(err) {
if(err) console.log(err);
return done(err, user);
});
} else {
return done(err, user);
}
});
}
));
app.post('/auth/google',
passport.authenticate('google-id-token'),
function (req, res) {
res.send(req.user? 200 : 401);
}
);
};
然而,我只会继续得到401回应和#34;未经授权"信息。我仔细检查了我的clientID,我还使用https://www.googleapis.com/oauth2/v3/tokeninfo?id_token来验证生成的令牌,一切似乎都没问题。
更重要的是,昨天,当我进行第一次测试时,它起作用了。今天,使用新令牌,它没有。
我在这里缺少什么?
答案 0 :(得分:0)
实际上这是我的错误,这里的解决方案很简单 - 我唯一要做的就是将Content-Type
标题设置为application/json
。
不同的标题或根本没有标题导致401响应。