2017-07-26 115 views
0

如何在重置Meteor帐户密码包密码后禁用登录?重置Meteor帐户密码后禁用登录 - 密码

发送重置链接到客人的电子邮件后,我有这样的代码来重设密码,

Accounts.resetPassword(this.props.params.token, this.refs.password.value.trim(),(err) => { 
      if(err){ 
       Bert.alert(err, 'danger', 'growl-top-right'); 
      } else { 
       Bert.alert("Password is successfully changed.", 'success', 'growl-top-right'); 
      } 
      this.setState({resetPassword:false}); 
      this.refs.password.value = ""; 
     }); 

几秒钟后,它会自动登录用户中心页面。这里的问题是,我有不同类型的用户,guest(无法登录),admin(有权管理用户)和staff(app的已验证用户)。 如果客人重置密码,他们会自动登录哪个地方是错误的。

如何禁用自动登录?

顺便说一句,我使用Meteor + React JS和React-router。

这里是我的验证登录尝试的代码,

Accounts.validateLoginAttempt((data)=>{ 
    if(data.error) 
     return data.error; 
    if(!data.user.emails[0].verified) 
     throw new Meteor.Error(403, 'Verify email account first'); 
    if((data.user.profile && data.user.profile.retired) || (data.user.roles.company.includes("guest"))) 
     throw new Meteor.Error(403, 'Account must be accepted by an admin'); 
    else 
     return true; 
}); 
+0

我确定有办法做到这一点,但它听起来像是你的应用程序没有正确计划。为什么不能让所有用户都能够登录,但是根据授权级别限制功能?而不是根据他们是否拥有经过验证的地址来设置其权限。 – d4nyll

+0

客人可以使用公司帐户注册。所以我允许在公共页面上注册。但他们需要确认注册用户是可以登录的员工。 – JMA

回答

0

可以使用AccountsServer#validateLoginAttempt(func)方法来测试传递到回调的对象user是否是客人,如果是的话,返回falsy值。

这是在服务器端完成的。

这个answer提供了一个基于用户是否有验证邮件的示例实现。

+0

我添加了validateLoginAttempt代码。但似乎不工作。 – JMA