Я создаю приложение Meteor, и мне нужно удалить автологин Meteor после того, как пользователь создаст учетную запись.
Я использую учетные записи-пароль и учетные записи для пользовательского интерфейса (необязательно).
Есть идеи? Спасибо.
Я создаю приложение Meteor, и мне нужно удалить автологин Meteor после того, как пользователь создаст учетную запись.
Я использую учетные записи-пароль и учетные записи для пользовательского интерфейса (необязательно).
Есть идеи? Спасибо.
Это простое решение для входа в систему по электронной почте, оно деактивирует автологин после создания пользователя и запрещает последующие входы в систему до тех пор, пока адрес электронной почты не будет проверен:
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;
});
}
Вы можете использовать следующий код:
Установить флаг 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;
}
});
Я нашел более простой подход:
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;
}
});
Это видит, что пользователь был буквально только что создан, и поэтому не регистрирует его.