我正在构建一个Meteor应用程序,我需要在用户创建帐户后删除Meteor的自动登录。
我正在使用UI的帐户密码和帐户条目(可选)。
有什么想法吗?谢谢。
答案 0 :(得分:8)
这是一个通过电子邮件登录的简单解决方案,它在用户创建后停用自动登录并拒绝以后登录,直到验证电子邮件地址:
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;
});
}
答案 1 :(得分:1)
您可以使用以下代码:
在创作
上设置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;
}
});
答案 2 :(得分:0)
我找到了一种更简单的方法:
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;
}
});
这看到用户刚刚创建,因此不会将其登录。