1

我正在尝试使用谷歌应用电子邮件 ID 的护照 js。我可以使用 gmail.com 电子邮件 ID 进行身份验证。但是,如果电子邮件 ID 是谷歌应用 ID (google.com/a/companyname.com),我该如何进行身份验证。

这是我的代码

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);
4

3 回答 3

2

您的代码缺少一些重要部分:

...
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 地址登录了。

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

于 2013-03-21T10:16:01.400 回答
1

我创建了一种方法来验证电子邮件域是否是我要授权的域:

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

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

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

在护照谷歌策略的回调中 https://github.com/jaredhanson/passport-google-oauth

于 2013-03-30T16:53:04.073 回答
1

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

if (profile.emails[0].split('@')[1] !== authorizedDomain) {
    return done(null, false);
}
于 2014-01-16T01:04:59.520 回答