我在Node.js网络服务项目中使用了Passport-Google-OAuth。我正在使用OAuth2Strategy。
我使用的流程是调用网络服务方法从Gmail帐户验证用户身份。最初,我通过调用Passport-google-OAuth接收Raw HTMl。哪个工作正常。
然后我使用有效的Gmail帐户登录。一旦Google调用了回调网址,服务器就会进入无限循环,并在固定的时间间隔后一次又一次地调用回调网址。
Google的My Passport策略配置如下:
// Use the GoogleStrategy within Passport.
// Strategies in Passport require a `verify` function, which accept
// credentials (in this case, an accessToken, refreshToken, and Google
// profile), and invoke a callback with a user object.
passport.use(new GoogleStrategy({
clientID : "948630708036-2t6mestiv81gtv0s9n6iptoava4o1cpa.apps.googleusercontent.com",
clientSecret : "omugRnr7nad2yMmefiZdBaLL",
callbackURL : "http://localhost:4000/api/auth/google/callback"
},
function(token, refreshToken, profile, done) {
console.log('Inside global callback.');
// make the code asynchronous
// User.findOne won't fire until we have all our data back from Google
process.nextTick(function() {
// try to find the user based on their google id
User.findOne({ 'google.id' : profile.id }, function(err, user) {
if (err)
return done(err);
if (user) {
// if a user is found, log them in
return done(null, user);
} else {
// if the user isnt in our database, create a new user
var newUser = new User();
// set all of the relevant information
newUser.google.id = profile.id;
newUser.google.token = token;
newUser.google.name = profile.displayName;
newUser.google.email = profile.emails[0].value; // pull the first email
return done(null, newUser);
}
});
});
}));
然后我从服务项目中的端点调用Passport:
passport.authenticate('google', { session:false,scope : ['profile', 'email'] });
回调网址包含以下代码,我将以JSON格式返回的Google帐户详细信息发送给最初访问网络服务的客户。
function(req, res) {
console.log('Callback by Google:'+res.body+' || '+ res.headers);
console.log('Response Object:'+util.inspect(res));
passport.authenticate('google', { session : false }),function(req,res){
console.log('Callback authenticated.User: +req.user);
res.json(req.user);
}
在Log中我得到“Google回调:undefined || undefined”。
我正在禁用会话,因为这将是向不同客户端提供数据的API服务器。
我不知道我在做什么错。请指出在API(Web服务)服务器中使用Passport-Google-OAuth(OAuth2Strategy)的任何资源或示例。我是否需要遵循其他方式。感谢您的帮助。
答案 0 :(得分:0)
您的路线可能存在问题。看看这里的教程
https://scotch.io/tutorials/easy-node-authentication-google
这是我见过的最好的。我已经实现了类似的东西。