Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MeteorJS阻止某些用户登录的正确方法_Javascript_Meteor - Fatal编程技术网

Javascript MeteorJS阻止某些用户登录的正确方法

Javascript MeteorJS阻止某些用户登录的正确方法,javascript,meteor,Javascript,Meteor,在MeteorJS应用程序中,我需要阻止一些用户登录 特别是,如果用户使用了非常旧的密码,例如超过90天,我们希望强制他们在再次登录之前重置密码 作为一个尝试实现这一点的MeteorJS初学者,我在管理员登录javascript文件中的“视图”文件夹中的某个地方有以下代码: Template.adminLogin.events({ 'submit #frm-admin-login': function(e) { e.preventDefault(); i

在MeteorJS应用程序中,我需要阻止一些用户登录

特别是,如果用户使用了非常旧的密码,例如超过90天,我们希望强制他们在再次登录之前重置密码

作为一个尝试实现这一点的MeteorJS初学者,我在管理员登录javascript文件中的“视图”文件夹中的某个地方有以下代码:

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');    
});


我认为我们对“非常旧的密码”有非常不同的定义我认为我们对“非常旧的密码”有非常不同的定义