在我的Meteor.js应用程序中,我正在使用accounts-google软件包以便与Google帐户建立关联。我有两个问题。
首先,有一种简单的方法可以过滤使用的帐户吗?我希望用户只能与属于我公司的Google帐户建立联系。我们的Google帐户邮件以@ mycompany.com结尾。所以这将是一个简单的邮件过滤。 我已经通过一些post登录钩子完成了这个,但我想知道是否有更简单的方法。
我的第二个问题是如何强制开启谷歌帐户选择器。目前,如果我尝试连接错误的谷歌帐户,如果我只添加此帐户(如gmail,驱动器等),谷歌选择器不会弹出并自动连接到这个错误的帐户。因此,在这种情况下,用户完全被阻止(如果他试图使用错误的帐户登录但我的应用程序断开了他,但谷歌帐户模块不建议他与另一个帐户连接)。
感谢您的帮助。
答案 0 :(得分:2)
要限制注册/登录您的域,只需在服务器上执行:
var checkEmailAgainstAllowed = function(email) {
var allowedDomains = ['mycompanydomain.com'];
var allowedEmails = ['otheruser@fromotherdomain.com','anotheruser@fromanotherdomain.com'];
var domain = email.replace(/.*@/,'').toLowerCase();
email = email.toLowerCase();
return _.contains(allowedEmails, email) || _.contains(allowedDomains, domain);
};
Accounts.config({
restrictCreationByEmailDomain: function(email) {
if (!email) {
throw new Meteor.Error(403,'This email address is not allowed');
}
if (!checkEmailAgainstAllowed(email)) {
throw new Meteor.Error(403,'This email domain is not allowed');
}
return true;
}
});
要登录,您需要在客户端上:
Meteor.loginWithGoogle({
forceApprovalPrompt: true, //this is what you want, to rerequest approval each time that prompts the google login prompt
loginStyle : "redirect", //or not, depending on your need
requestPermissions : ['profile', 'email'],
requestOfflineToken: true
}, function (err) {
if (err)
// set a session variable to display later if there is a login error
Session.set('loginError', 'reason: ' + err.reason + ' message: ' + err.message || 'Unknown error');
});
旁注: 或者,您可以设置路由,以便每次调用新路由时,您都可以登录,每次路由被销毁或Windows卸载时,都会调用logout。这会导致每次路线更改时进行登录/退出往返,但您将确保新用户始终拥有新会话
编辑: 当您退出流星应用程序时,您不会退出谷歌。这就是oauth的工作方式。所以,基本上,如果你想要一个流星注销也将用户从他们的谷歌帐户中删除,那么下次他们回来时,他们需要再次提供凭据,你应该这样做:
Meteor.logout(function(e) {
if (e) {
console.log("Could not log the user out")
} else {
window.location.replace('https://accounts.google.com/Logout');
}
});
这使用Meteor.logout()
的回调,这样当注销成功时,用户就会被重定向到谷歌的中央帐户注销网址,用户也会退出所有谷歌服务。