passportjsauthentication使用谷歌应用程序的电子邮件ID

我正在尝试护照与谷歌应用程序电子邮件ID的JS。 我能够使用gmail.com电子邮件ID进行身份validation。 但是,如果电子邮件ID是谷歌应用程序ID(google.com/a/companyname.com),我如何才能进行身份validation。

这是我的代码

var express = require('express'); var app = express(); var passport = require('passport'); var GoogleStrategy = require('passport-google').Strategy; passport.use(new GoogleStrategy({ returnURL: 'http://10.3.0.52:3000/auth/google/return', realm: 'http://10.3.0.52:3000/' }, function(identifier, profile, done) { User.findOrCreate({ openId: identifier }, function(err, user) { done(err, user); }); } )); app.get('/auth/google', passport.authenticate('google')); app.get('/auth/google/return', passport.authenticate('google', { successRedirect: '/', failureRedirect: '/login' })); app.get('/', function(req, res){ res.writeHead(200); res.end("connected"); }); app.listen(process.env.PORT || 3000); 

您的代码缺less一些关键部分:

 ... passport.use(...); // this you have // these are required as well. app.use(passport.initialize()); app.use(passport.session()); // please read docs for the following two calls passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); ... 

有了这些,我可以使用我的Google App地址login。

编辑:它只适用于节点0.8虽然,节点0.10给出了一个错误。 无论如何,我认为使用passport-google-oauth是一个更好的解决scheme。 为此,您必须向Google注册您的应用程序( 此处 ); 注册后,您将获得可以使用的GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET代码。

我创build了一个方法来validation电子邮件域是否是我想要授权的域:

 UserSchema.method('checkFordomain', function(value) { var parts = value.split('@'); return (parts[1] == 'companyname.com'); }); 

这是我使用mongoose模式模型放入用户模型的方法

 if (!user.checkForMMdomain(profile.emails[0].value)) { return done(); } 

在护照谷歌策略callbackhttps://github.com/jaredhanson/passport-google-oauth

在您的passport.usecallback中,您可以根据主电子邮件地址的域名(或您正在查看的任何内容)执行额外的检查:

 if (profile.emails[0].split('@')[1] !== authorizedDomain) { return done(null, false); }