Google 使用 node.js 和 passport.js 的身份验证始终返回 401(未授权)
Google Authentication with node.js and passport.js always returning 401 (Unauthorized)
我正在尝试通过 Android 应用程序发送的 Google 令牌对用户进行身份验证。我正在使用 node.js 和护照。
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 响应和 "Unauthorized" 消息。我仔细检查了我的 clientID,我还使用 https://www.googleapis.com/oauth2/v3/tokeninfo?id_token 来验证生成的令牌,一切似乎都正常。
更重要的是,昨天,当我进行第一次测试时,它成功了。今天,有了新的令牌,它就不会了。
我在这里错过了什么?
实际上这是我的错误,这里的解决方案很简单 - 我唯一要做的就是将 Content-Type
header 设置为 application/json
.
不同 header 或根本没有 header 导致 401 响应。
我正在尝试通过 Android 应用程序发送的 Google 令牌对用户进行身份验证。我正在使用 node.js 和护照。
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 响应和 "Unauthorized" 消息。我仔细检查了我的 clientID,我还使用 https://www.googleapis.com/oauth2/v3/tokeninfo?id_token 来验证生成的令牌,一切似乎都正常。
更重要的是,昨天,当我进行第一次测试时,它成功了。今天,有了新的令牌,它就不会了。
我在这里错过了什么?
实际上这是我的错误,这里的解决方案很简单 - 我唯一要做的就是将 Content-Type
header 设置为 application/json
.
不同 header 或根本没有 header 导致 401 响应。