使用node.js和passport.js的Google身份验证始终返回401(未经授权)

时间:2016-02-11 21:16:08

标签: node.js passport.js google-signin

我尝试通过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来验证生成的令牌,一切似乎都没问题。

更重要的是,昨天,当我进行第一次测试时,它起作用了。今天,使用新令牌,它没有。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

实际上这是我的错误,这里的解决方案很简单 - 我唯一要做的就是将Content-Type标题设置为application/json

不同的标题或根本没有标题导致401响应。