2017-07-26 145 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