Ограничьте вход через Google учетными записями .edu в Meteor

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

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

person Viji123    schedule 30.01.2015    source источник


Ответы (2)


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

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

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

Accounts.config({ restrictCreationByEmailDomain: function(address) {
        return new RegExp('\\.edu$', 'i')).test(address)
    }
});
person Tarang    schedule 30.01.2015
comment
Этот метод не работал для меня. В журнале не было ошибки, но почему-то это не сработало, и пользователь (нежелательный) смог войти в систему. - person MegaMind; 12.12.2015

Пакет учетных записей позволяет настроить домен создания учетной записи через:

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

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

  1. Это только клиентская сторона, и она позволяет только правильно оформить форму входа в систему, чтобы представить логотип домена и т. д. Но это можно очень легко преодолеть, создав URL-адрес для входа в google oauth вручную.
  2. Если вам нужно настроить дополнительные параметры, такие как разрешение нескольких доменов или домена и некоторых внешних пользователей (возможно, сторонних подрядчиков или поддержки со стороны компании-разработчика программного обеспечения и т. д.), это не работает. В случае с account-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.

person Serkan Durusoy    schedule 30.01.2015
comment
Если вы запускаете Accounts.config на стороне сервера, разве он не проверяет его так же, как размещение неявных правил validateNewUser? : github.com/meteor/meteor /блоб/ - person Tarang; 30.01.2015
comment
Хм, на самом деле я думал о github.com /meteor/meteor/blob/ все время, но ни разу не посмотрел на источник validateNewUser. Ух ты! Спасибо что подметил это! - person Serkan Durusoy; 30.01.2015
comment
Пришлось понизить это, так как оба утверждения ложны. Хотя верно то, что скрипт на стороне клиента использует только restrictCreationByEmailDomain() для стилизации, на сервере по-прежнему выполняется надлежащая проверка, независимо от того, возвращаете ли вы строку или функцию. Из комментариев клиентского сценария (github. com/meteor/meteor/blob/devel/packages/accounts-google/): Note that all this does is change Google's UI --- accounts-base/accounts_server.js still checks server-side that the server has the proper email address after the OAuth conversation. - person Sphinxxx; 24.02.2017