Как создать пользователя без автологина после регистрации на Meteor

Я создаю приложение Meteor, и мне нужно удалить автологин Meteor после того, как пользователь создаст учетную запись.

Я использую учетные записи-пароль и учетные записи для пользовательского интерфейса (необязательно).

Есть идеи? Спасибо.


person skozz    schedule 03.09.2014    source источник
comment
comment
Да, дублируется. Извините, но я не нашел его перед созданием. Благодарю вас!   -  person skozz    schedule 03.09.2014


Ответы (3)


Это простое решение для входа в систему по электронной почте, оно деактивирует автологин после создания пользователя и запрещает последующие входы в систему до тех пор, пока адрес электронной почты не будет проверен:

if (Meteor.isServer) {

    Accounts.validateLoginAttempt(function(attemptInfo) {

        if (attemptInfo.type == 'resume') return true;

        if (attemptInfo.methodName == 'createUser') return false;

        if (attemptInfo.methodName == 'login' && attemptInfo.allowed) {
            var verified = false;
            var email = attemptInfo.methodArguments[0].user.email;
            attemptInfo.user.emails.forEach(function(value, index) {
                if (email == value.address && value.verified) verified = true;
            });
            if (!verified) throw new Meteor.Error(403, 'Verify Email first!');
        }

        return true;
    });

}
person boustanihani    schedule 15.10.2014
comment
Проблема в том, что код не создает пользователя. Потому что этот validateLoginAttemp() каким-то образом запускается до createUser(). Когда он возвращает false во втором случае, метеор не регистрирует нового пользователя и не отправляет подтверждение по электронной почте. - person Pedro Fernandes; 27.10.2017

Вы можете использовать следующий код:

Установить флаг firstLogin при создании

Accounts.onCreateUser(function(options, user) {
  user.firstLogin = true;
  return user;
});

Способ обновления флага

Meteor.methods({
  updateUserFirstLogin: function(userId) {
    Meteor.users.update({
      _id: userId
    }, {
      $set: {
        'firstLogin': false
      }
    });
  }
});

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

Accounts.validateLoginAttempt(function(attemptInfo) {
  if (!attemptInfo.user) {
    return false;
  }
  if (!attemptInfo.user.firstLogin) {
    return true;
  } else {
    Meteor.call('updateUserFirstLogin', attemptInfo.user._id);
    return false;
  }
});
person Adlen Afane    schedule 03.09.2014

Я нашел более простой подход:

Accounts.validateLoginAttempt((data) => {
    let diff = new Date() - new Date(data.user.createdAt);
    if (diff < 2000) {
        console.info('New user created -- denying autologin.');
        return false;
    } else {
        return true;
    }
});

Это видит, что пользователь был буквально только что создан, и поэтому не регистрирует его.

person dthree    schedule 27.04.2017