我正在尝试制作一个node.js网络应用程序,告诉用户使用他们的Gmail登录。
所以我尝试使用这里的说明:http://passportjs.org/guide/google/。我将网址www.example.com更改为localhost,然后运行应用程序。它告诉我它无法找到用户。这是整个日志:User.findOrCreate({openID:identifier},function(err,user){(然后在下一行)ReferenceError:用户未定义。
答案 0 :(得分:0)
您需要定义"用户"通过从模型中调用它。创建用户模型(如果您还没有)并将其作为变量导入。例如。
var User = require('/path/to/User');
有时候我觉得调试将回调记录到控制台是有帮助的,看看是不是要吐出所需的输出。
答案 1 :(得分:0)
我刚刚实施了一个也许这会有所帮助,我使用Express,路线部分位于底部。请记住在Google Key中设置您的主机,我的应用程序具有AWS服务器的完整URL
var passport = require('passport');
// ====== Passport and OAuth2 API
var GoogleStretegy = require('passport-google-oauth').OAuth2Strategy;
passport.serializeUser(function (user, done) {
done(null, user);});
passport.deserializeUser(function (obj, done){
done(null, obj);});
// Set Passport Initialize and Sessions
app.use(passport.initialize());
app.use(passport.session());
passport.use(new GoogleStretegy({
clientID: CREDENTIALS.google.GOOGLE_CLIENT_ID,
clientSecret: CREDENTIALS.google.GOOGLE_CLIENT_SECRET,
callbackURL:"<host>/oauth2callback"
},
function (req, accessToken, refreshToken, profile, done) {
process.nextTick(function () {
console.log(JSON.stringify(profile));
console.log(req);
var username= profile.emails[0].value.split('@');
User.findOne({email: profile.emails[0].value,username:username[0]}).exec(function (err,user) {
if(!user){
var user = new User({username: username[0]});
user.set('email',profile.emails[0].value);
user.set('FullName',profile.DisplayName);
user.save(function (err) {
if(err){
console.log(err);
profile=null;
return done(null,profile);
}else {
return done(null, profile);
}
});
}else {
return done(null, profile);
}
});
// return done(null, profile);
});
}
));
///路线!
router.get('/logout', function (req, res) {
req.session.destroy(function () {
// Google log out
req.logout();
res.redirect('/login');
});
});
//Google OAuth2
router.get('/auth/google',passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/userinfo.profile','https://www.googleapis.com/auth/userinfo.email'] }));
router.get('/oauth2callback', passport.authenticate('google', { failureRedirect: '/login' }), function (req, res) {
res.redirect('/');
});