我如何使用node.js模块passport-google

时间:2014-10-25 18:56:54

标签: javascript node.js

我正在尝试制作一个node.js网络应用程序,告诉用户使用他们的Gmail登录。

所以我尝试使用这里的说明:http://passportjs.org/guide/google/。我将网址www.example.com更改为localhost,然后运行应用程序。它告诉我它无法找到用户。这是整个日志:User.findOrCreate({openID:identifier},function(err,user){(然后在下一行)ReferenceError:用户未定义。

2 个答案:

答案 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('/');
});