2015-01-30 2 views
3

Я пытаюсь ограничить свою кнопку входа в Google +, чтобы разрешить учетные записи @ something.edu для входа. Как бы я это сделал. Это мой код до сих пор:Ограничить вход в Google на учетные записи .edu в Meteor

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('/') 
      } 
     }) 
    } 
}) 

ответ

4

Вы можете сделать это с помощью Accounts.config (в корневом каталоге, поэтому он работает на клиенте и сервере)

Accounts.config({ restrictCreationByEmailDomain: 'something.edu' }) 

Если вам нужно что-то более обычай, вы можете заменить something.edu с помощью метода, если вам нужно Свиль вашего требования, то есть для любого домена .edu:

Accounts.config({ restrictCreationByEmailDomain: function(address) { 
     return new RegExp('\\.edu$', 'i')).test(address) 
    } 
}); 
+0

Этот метод не работал для меня. В журнале не было ошибок, но почему-то это не работало, и пользователь (нежелательный) смог войти в систему. – MegaMind

1

Счет Pac Кейдж позволяет настраивать счета домена создания через:

Accounts.config({ 
    restrictCreationByEmailDomain: 'something.edu' 
}) 

Но это имеет некоторые ограничения в случае Google:

  1. Это только со стороны клиента и позволяет только для формы Войти, чтобы должным образом разработано, чтобы представлять логотип домена и т. д. Но его можно легко преодолеть, создав URL-адрес google oauth signin вручную.
  2. Если вам нужно настроить дополнительные параметры, например, разрешить несколько доменов или домен и некоторых внешних пользователей (возможно, сторонних подрядчиков или поддержки от компания программного обеспечения и т. д.), это не работает. В случае учетных записей - google, пакет проверяет, является ли restrictCreationByEmailDomain строкой, и если это функция, она просто отбрасывает ее.

Поэтому, чтобы иметь возможность правильно и безопасно использовать такие функциональные возможности, вы должны использовать официальный Accounts.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 = ['[email protected]']; 
    var domain = email.replace(/.*@/,'').toLowerCase(); 
    return _.contains(allowedEmails, email) || _.contains(allowedDomains, domain); 
}; 

Если вы хотите быть очень осторожными, вы можете осуществить то же самое для Accounts.validateLoginAttempt и Accounts.onCreateUser обратные вызовы также.

+2

Если вы запустите 'Accounts.config' на стороне сервера, он не проверяет его так же, как размещение неявных' validateNewUser' правила? : https://github.com/meteor/meteor/blob/58869b050bf5cdc77991505b10c46112d85aff24/packages/accounts-base/accounts_server.js#L1088-L1112 – Akshat

+0

Хм, я действительно думал о https://github.com/meteor/ meteor/blob/58869b050bf5cdc77991505b10c46112d85aff24/packages/google/google_client.js # L48 все время, но на самом деле не смотрел источник для 'validateNewUser'. Вау! Спасибо что подметил это! –

+0

Пришлось превзойти это, так как обе утверждения ложны. Хотя верно, что сценарий на стороне клиента использует только 'restrictCreationByEmailDomain()' для стилизации, на сервере все еще происходит правильная проверка, возвращаете ли вы строку или функцию. Из комментариев на клиентском скрипте (https://github.com/meteor/meteor/blob/devel/packages/accounts-google/google.js#L11): 'Обратите внимание, что все это происходит, это изменение пользовательского интерфейса Google --- accounts-base/accounts_server.js все еще проверяет серверную сторону, что сервер имеет правильный адрес электронной почты после сеанса OAuth. ' – Sphinxxx

Смежные вопросы