Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用google apps电子邮件id的passportjs身份验证_Javascript_Node.js_Express_Passport.js - Fatal编程技术网

Javascript 使用google apps电子邮件id的passportjs身份验证

Javascript 使用google apps电子邮件id的passportjs身份验证,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我正在使用谷歌应用程序电子邮件id尝试passport 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('passp

我正在使用谷歌应用程序电子邮件id尝试passport 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);

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

有了这些,我就可以使用我的谷歌应用程序地址登录了


编辑:它仅适用于节点0.8,但节点0.10会给出一个错误。无论如何,我认为使用passport google oauth是一个更好的解决方案。为此,你必须向谷歌注册你的应用程序;注册后,您将获得可以使用的谷歌客户端ID和谷歌客户端密码。

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

有了这些,我就可以使用我的谷歌应用程序地址登录了


编辑:它仅适用于节点0.8,但节点0.10会给出一个错误。无论如何,我认为使用passport google oauth是一个更好的解决方案。为此,你必须向谷歌注册你的应用程序;注册后,将向您提供您可以使用的GOOGLE_CLIENT_ID和GOOGLE_CLIENT_密码。

我创建了一个方法,用于验证电子邮件域是否是我要授权的域:

UserSchema.method('checkFordomain', function(value) {
    var parts = value.split('@');
    return (parts[1] == 'companyname.com');
});
这是我在用户模型的模型中使用的方法,使用mongoose模式模型

if (!user.checkForMMdomain(profile.emails[0].value)) {
    return done();
}
在passport的回调中谷歌的策略

我创建了一个方法,用于验证电子邮件域是否是我要授权的域:

UserSchema.method('checkFordomain', function(value) {
    var parts = value.split('@');
    return (parts[1] == 'companyname.com');
});
这是我在用户模型的模型中使用的方法,使用mongoose模式模型

if (!user.checkForMMdomain(profile.emails[0].value)) {
    return done();
}
在passport的回调中谷歌的策略

在您的passport中。使用callback,您可以根据主要电子邮件地址的域或您正在检查的任何内容执行其他检查:

if (profile.emails[0].split('@')[1] !== authorizedDomain) {
    return done(null, false);
}
在passport.use callback中,您可以根据主电子邮件地址的域或您正在检查的任何内容执行其他检查:

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

我正在使用OAuth2Strategy,我可以使用我的Google应用程序地址登录。为了更好地理解,我编辑了我的代码,添加了我的代码。。我想我应该用谷歌oauth护照。你能告诉我什么是GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET吗?我正在使用OAuth2策略,我可以使用我的GOOGLE应用程序地址登录。为了更好地理解,我编辑了我的代码,添加了我的代码。。我想我应该用谷歌oauth护照。你能告诉我什么是GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET吗。现在可以从2个不同的谷歌应用程序ID登录。name@abc.com, name2@xyz.com. 我希望abc.com中的用户只登录应用程序。代码包含abc.com帐户的客户id和客户机密。说明如何使用某些URL参数执行此操作。我不确定是否可以将这些参数传递给Passport。@robertklep为什么您认为Passport google oauth更好,请在建议更好的东西时提供一个理由!就我所见,没有任何好处,也没有必要先创建一个应用程序…@Linus好吧,首先,passport google并不像我说的那样在节点0.10上工作。此外,谷歌似乎也在推动OAuth2而不是OpenID,比如使用谷歌凭证登录。我如何限制用户仅从特定域登录。现在可以从2个不同的谷歌应用程序ID登录。name@abc.com, name2@xyz.com. 我希望abc.com中的用户只登录应用程序。代码包含abc.com帐户的客户id和客户机密。说明如何使用某些URL参数执行此操作。我不确定是否可以将这些参数传递给Passport。@robertklep为什么您认为Passport google oauth更好,请在建议更好的东西时提供一个理由!就我所见,没有任何好处,也没有必要先创建一个应用程序…@Linus好吧,首先,passport google并不像我说的那样在节点0.10上工作。此外,谷歌似乎也在推广OAuth2而不是OpenID,比如使用谷歌凭证登录。这个答案不是这个问题的正确答案。我又问了一个问题。我太晚才得到答案。因为您不需要在代码中验证应用程序域。很好!正确答案是建议编辑oauth2.js的源代码?当然我知道hd参数,但它不起作用。所以接受这个答案。@RajeeshV在param得到支持之前,这是最小可行的解决方案。如果您尝试部署应用程序,会发生什么情况?您是否复制了整个node_modules文件夹而不是npm install?您将丢失节点_模块第三方LIB中的所有修改。所以接受答案。另外,如果你更新了你的依赖关系,官方回购协议中已经有了对hd参数的支持。这个答案不是这个问题的正确答案。我又问了一个问题。我太晚才得到答案。因为您不需要在code.Swee中验证应用程序域
T正确答案是建议编辑oauth2.js的源代码?当然我知道hd参数,但它不起作用。所以接受这个答案。@RajeeshV在param得到支持之前,这是最小可行的解决方案。如果您尝试部署应用程序,会发生什么情况?您是否复制了整个node_modules文件夹而不是npm install?您将丢失节点_模块第三方LIB中的所有修改。所以接受答案。另外,如果您更新依赖项,官方回购协议中已经提供了对hd参数的支持。