【发布时间】:2020-04-24 18:34:40
【问题描述】:
我正在尝试使用Passport-Google-Token 策略进行与 Facebook 策略类似的用户身份验证,效果很好,但出于某种原因,Google 身份验证,即使所有参数似乎都配置正确,但不会返回任何信息并卡住在上面。任何建议将不胜感激。
const GoogleTokenStrategy = require('passport-google-token').Strategy;
passport.use('googleToken', new GoogleTokenStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET
}, function(accessToken, refreshToken, profile, done) {
console.log('profile google: ', profile);
const email = profile.email;
const name = profile.name;
const firstname = profile.given_name;
const lastname = profile.family_name;
User.findOne({ email: email }, function (err, user) {
if (err) { return done(err); }
// Return if user not found in database
if (!user) {
const newUser = new User({
_id: new mongoose.Types.ObjectId(),
name: name,
firstname: firstname,
lastname: lastname,
email: email
});
newUser.save()
.then(result => {
return done(null, newUser);
})
.catch(err => {
console.log(err);
return done(null, false, {
statusCode: 500,
message: 'Server error',
error: err.message
});
});
}
return done(null, user);
}).catch(err => {
console.log(err);
return done(null, false, {
statusCode: 500,
message: 'Server error',
error: err.message
});
});
}
));
exports.googleLogin = (req, res, next) => {
console.log('started google login');
return passport.authenticate(['googleToken'], function(error, user, info) {
var token;
if (err) {
return res.status(404).json({
statusCode: 404,
message: 'Auth failed',
error: err
});
}
if (info) {
return res.status(401).json({
statusCode: 401,
message: 'Auth failed',
error: info[0]
});
}
// If a user is found
if (user) {
token = user.generateJwt();
return res.status(200).json({
id: user._id,
name: user.name,
email: user.email,
token: token
});
} else {
const error = new Error("User not found");
return res.status(403).json({
statusCode: 403,
message: 'Auth failed',
error: error
});
}
})};
router.post('/googleLogin', controller.googleLogin);
【问题讨论】:
标签: node.js passport.js google-signin