Meteor.js谷歌帐户:过滤电子邮件并强制帐户选择器

时间:2015-03-12 11:02:09

标签: meteor google-account

在我的Meteor.js应用程序中,我正在使用accounts-google软件包以便与Google帐户建立关联。我有两个问题。

首先,有一种简单的方法可以过滤使用的帐户吗?我希望用户只能与属于我公司的Google帐户建立联系。我们的Google帐户邮件以@ mycompany.com结尾。所以这将是一个简单的邮件过滤。 我已经通过一些post登录钩子完成了这个,但我想知道是否有更简单的方法。

我的第二个问题是如何强制开启谷歌帐户选择器。目前,如果我尝试连接错误的谷歌帐户,如果我只添加此帐户(如gmail,驱动器等),谷歌选择器不会弹出并自动连接到这个错误的帐户。因此,在这种情况下,用户完全被阻止(如果他试图使用错误的帐户登录但我的应用程序断开了他,但谷歌帐户模块不建议他与另一个帐户连接)。

感谢您的帮助。

1 个答案:

答案 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()的回调,这样当注销成功时,用户就会被重定向到谷歌的中央帐户注销网址,用户也会退出所有谷歌服务。