Javascript MeteorJS阻止某些用户登录的正确方法
在MeteorJS应用程序中,我需要阻止一些用户登录 特别是,如果用户使用了非常旧的密码,例如超过90天,我们希望强制他们在再次登录之前重置密码 作为一个尝试实现这一点的MeteorJS初学者,我在管理员登录javascript文件中的“视图”文件夹中的某个地方有以下代码:Javascript MeteorJS阻止某些用户登录的正确方法,javascript,meteor,Javascript,Meteor,在MeteorJS应用程序中,我需要阻止一些用户登录 特别是,如果用户使用了非常旧的密码,例如超过90天,我们希望强制他们在再次登录之前重置密码 作为一个尝试实现这一点的MeteorJS初学者,我在管理员登录javascript文件中的“视图”文件夹中的某个地方有以下代码: Template.adminLogin.events({ 'submit #frm-admin-login': function(e) { e.preventDefault(); i
Template.adminLogin.events({
'submit #frm-admin-login': function(e) {
e.preventDefault();
if ($('#frm-admin-login').validate().form()) {
var loginProperties = {
email: $(e.target).find('input[name=email]').val(),
password: $(e.target).find('input[name=password]').val()
};
Meteor.loginWithPassword(loginProperties.email, loginProperties.password, function(err) {
if (err) return throwError(err);
if (Meteor.userId()) {
let seconds = new Date().getTime() - Meteor.user().lastPasswordResetAt.getTime();
let days = seconds / (1000*60*60*24);
let daysToForceResetPassword = parseInt(Meteor.DAYS_TO_FORCE_RESET_PASSWORD);
$(e.target).find('input[name=password]').val('');
if (days > daysToForceResetPassword){
// log out user, and
// show error that you must reset password in order to login
}else{
// no problem, proceed to dashboard
MNotifications.clear({type: 'error'});
Router.go('adminDashboard');
}
}
});
}
}
});
这是可行的,但奇怪的是,我首先允许用户登录,然后当我们意识到他需要立即重置密码时,我们立即将他从视图层注销
这样做是否正确,或者是否有更好的方法在内部自定义或修改Meteor.loginWithPassword()方法,使其根本不允许登录?您应该使用
validateLogInTest
通过抛出Meteor.Error
,您可以向客户端报告特定的错误消息,并提醒用户从此处重置密码:
实施示例:
// on server
Accounts.validateLoginAttempt(function (attempt) {
if (!attempt.allowed) return false;
if (attempt.user) {
let seconds = attempt.user.lastPasswordResetAt.getTime();
let days = seconds / (1000 * 60 * 60 * 24);
let daysToForceResetPassword = parseInt(Meteor.settings.DAYS_TO_FORCE_RESET_PASSWORD);
if (days > daysToForceResetPassword) {
throw new Meteor.Error('expired-password')
}
}
return true;
});
// on client
Meteor.loginWithPassword(loginProperties.email, loginProperties.password, function(err) {
if (err.error === 'expired-password') {
// show error that you must reset password in order to login
}
if (err) return throwError(err);
// else no problem, proceed to dashboard
MNotifications.clear({type: 'error'});
Router.go('adminDashboard');
});
您应该在服务器上使用
validateLogInTest
通过抛出Meteor.Error
,您可以向客户端报告特定的错误消息,并提醒用户从此处重置密码:
实施示例:
// on server
Accounts.validateLoginAttempt(function (attempt) {
if (!attempt.allowed) return false;
if (attempt.user) {
let seconds = attempt.user.lastPasswordResetAt.getTime();
let days = seconds / (1000 * 60 * 60 * 24);
let daysToForceResetPassword = parseInt(Meteor.settings.DAYS_TO_FORCE_RESET_PASSWORD);
if (days > daysToForceResetPassword) {
throw new Meteor.Error('expired-password')
}
}
return true;
});
// on client
Meteor.loginWithPassword(loginProperties.email, loginProperties.password, function(err) {
if (err.error === 'expired-password') {
// show error that you must reset password in order to login
}
if (err) return throwError(err);
// else no problem, proceed to dashboard
MNotifications.clear({type: 'error'});
Router.go('adminDashboard');
});
我认为我们对“非常旧的密码”有非常不同的定义我认为我们对“非常旧的密码”有非常不同的定义