Login 限制Google登录Meteor中的.edu帐户
我正试图将我的Google+登录按钮限制为只允许@something.edu帐户登录。我该怎么做呢。这是我目前的代码:Login 限制Google登录Meteor中的.edu帐户,login,meteor,iron-router,google-login,Login,Meteor,Iron Router,Google Login,我正试图将我的Google+登录按钮限制为只允许@something.edu帐户登录。我该怎么做呢。这是我目前的代码: Template.googleLogin.events({ 'click #gLogin': function(event) { Meteor.loginWithGoogle({}, function(err){ if (err) { throw new Meteor.Error("Google l
Template.googleLogin.events({
'click #gLogin': function(event) {
Meteor.loginWithGoogle({}, function(err){
if (err) {
throw new Meteor.Error("Google login didn't work!");
}
else {
Router.go('/home')
}
});
}
})
Template.primaryLayout.events({
'click #gLogout': function(event) {
Meteor.logout(function(err){
if (err) {
throw new Meteor.Error("Hmm looks like your logout failed. ");
}
else {
Router.go('/')
}
})
}
})
您可以使用
Accounts.config
(在根目录中,因此它同时在客户端和服务器上运行)来完成此操作
如果您需要更定制的内容,如果您需要细化您的需求,您可以使用方法替换something.edu
,例如,对于任何.edu
域:
Accounts.config({ restrictCreationByEmailDomain: function(address) {
return new RegExp('\\.edu$', 'i')).test(address)
}
});
accounts软件包允许通过以下方式配置帐户创建域:
Accounts.config({
restrictCreationByEmailDomain: 'something.edu'
})
但对于谷歌来说,这有一些局限性:
restrictCreationByEmailDomain
是否是一个字符串,如果它是一个函数,它只会丢弃它帐户。validateNewUser
回调:
Accounts.validateNewUser(function(newUser) {
var newUserEmail = newUser.services.google.email;
if (!newUserEmail) throw new Meteor.Error(403,'You need a valid email address to sign up.');
if (!checkEmailAgainstAllowed(newUserEmail)) throw new Meteor.Error(403,'You need an accepted organization email address to sign up.');
return true;
});
var checkEmailAgainstAllowed = function(email) {
var allowedDomains = ['something.edu'];
var allowedEmails = ['someone@example.com'];
var domain = email.replace(/.*@/,'').toLowerCase();
return _.contains(allowedEmails, email) || _.contains(allowedDomains, domain);
};
如果您想格外小心,您可以对
帐户.validateLogInTest
和帐户.onCreateUser
回调实现相同的操作 如果在服务器端运行Accounts.config
,它的验证方式是否与放置隐式validateNewUser
规则相同嗯,实际上我一直在想,但从来没有看过validateNewUser
的源代码。哇!谢谢你指出这一点!我不得不否决这一点,因为这两种说法都是错误的。虽然客户端脚本仅使用restrictCreationByEmailDomain()
进行样式设置是正确的,但无论您返回字符串还是函数,服务器上仍会进行适当的验证。从客户端脚本的注释():注意,这只会改变谷歌的用户界面——accounts base/accounts\u server.js在OAuth对话后仍然会检查服务器是否有正确的电子邮件地址。
这种方法对我不起作用。日志中并没有错误,但不知何故它并没有工作,用户(不需要的)能够登录。
Accounts.validateNewUser(function(newUser) {
var newUserEmail = newUser.services.google.email;
if (!newUserEmail) throw new Meteor.Error(403,'You need a valid email address to sign up.');
if (!checkEmailAgainstAllowed(newUserEmail)) throw new Meteor.Error(403,'You need an accepted organization email address to sign up.');
return true;
});
var checkEmailAgainstAllowed = function(email) {
var allowedDomains = ['something.edu'];
var allowedEmails = ['someone@example.com'];
var domain = email.replace(/.*@/,'').toLowerCase();
return _.contains(allowedEmails, email) || _.contains(allowedDomains, domain);
};