我正在使用 Meteor 开发一个简单的应用程序来学习框架。我正在使用accounts-password
包含该软件包的accounts-base
软件包。
用户将创建一个帐户,他们的电子邮件地址将作为他们登录的用户名。这一切都按预期工作得很好。现在我想把它提升到一个新的水平。
我希望能够在一段时间内暂时禁止用户 - 比如说一周。
使用该accounts-password
包是否可以实现此功能,或者是否存在另一个可以完成此功能的包?否则我怎么能自己实现这个功能?
我正在使用 Meteor 开发一个简单的应用程序来学习框架。我正在使用accounts-password
包含该软件包的accounts-base
软件包。
用户将创建一个帐户,他们的电子邮件地址将作为他们登录的用户名。这一切都按预期工作得很好。现在我想把它提升到一个新的水平。
我希望能够在一段时间内暂时禁止用户 - 比如说一周。
使用该accounts-password
包是否可以实现此功能,或者是否存在另一个可以完成此功能的包?否则我怎么能自己实现这个功能?
在用户集合中对每个用户使用类似 isBanned 标志的东西怎么样?这样,您在登录用户之前检查此标志。您可以通过在应用禁令时设置一个日期字段来进一步扩展它,然后有一种方法可以计算经过的时间以查看是否可以自动解除禁令。
db.users.findOne()
{
[...]
"username" : "superadmin",
"profile" : {
"isActive" : true,
"createdBy" : "system",
// is this user banned?
"isBanned" : false,
"updatedAt" : ISODate("2016-10-07T17:33:42.773Z"),
"loginTime" : ISODate("2016-10-07T17:25:44.068Z"),
"logoutTime" : ISODate("2016-10-07T17:33:42.660Z")
},
"roles" : [
"superAdmin"
]
}
您的登录表单事件可能如下所示:
Template.loginForm.events({
'submit #login-form': function(event,template){
event.preventDefault();
// Check for isBanned flag
if(Meteor.users.find({username: template.find("#userName").value,isBanned: false}) {
Meteor.loginWithPassword(
template.find("#userName").value,
template.find("#password").value,
function(error) {
if (error) {
// Display the login error to the user however you want
console.log("Error logging in. Error is: " + error);
Session.set('loginErrorMessage', error.message);
Router.go('/');
}
}
);
Meteor.call('updateLoginTime');
Router.go('loggedIn');
},
}