失敗的嘗試計數未在代碼中的用戶集合中更新。最後一行failAttemp = 0;將永遠不會執行,因爲函數已經返回。
此外,我看到一些您可能想要解決的問題: Meteor.Error不是檢查輸入的不正確密碼的正確方法。這將是未定義的,甚至更多,它不會觸發,因爲'密碼不正確'的額外空間。 使用參數info
附帶的error
對象,並使用錯誤代碼而不是消息。
來自未註冊用戶的登錄嘗試獲取傳遞到Accounts.validateLoginAttempt
反正。在這種嘗試中,info.user
將爲空。除此之外,最好檢查是否存在profile
字段是用戶對象。
當用戶已經3次失敗嘗試,並試圖爲第四次,他並不瞭解什麼是錯的。他仍然看到「密碼不正確」,並在服務器的控制檯上顯示「您需要聯繫管理員!」。 你可以拋出Meteor.Error與更多的信息。
當用戶有3次失敗的嘗試,他將留在「禁用」狀態。我的意思是,即使他記得他的正確密碼,他也不能再登錄。首先檢查嘗試是否被禁止,然後檢查嘗試失敗的次數。
當用戶進入一個失敗的嘗試後,正確的密碼,嘗試失敗計數應該回歸到0,至少這是我想你會想看着你的代碼(最後可達代碼行)。
這裏是將一個解決方案的示例:
- 保存失敗的嘗試。
- 根據錯誤代碼而不是消息執行檢查。
- 3次失敗嘗試後有信息。
- 正確處理未註冊的用戶。
- 允許用戶在嘗試失敗後登錄,如果他們記住他們的密碼。
- 成功登錄後重置失敗的嘗試次數。
代碼:
Accounts.validateLoginAttempt(function(info){
var user = info.user;
if (!user)
return false;
var failAttempt = 0;
if (user.profile)
failAttempt = user.profile.loginFaileAttempt;
var loginAllowed = false;
if(info.error && info.error.error == 403){
if(failAttempt >= 3) {
console.log('you need to contact the admin!');
throw new Meteor.Error(403, 'you need to contact the admin!');
}
// increment the fail attempts
failAttempt++;
console.log(failAttempt);
loginAllowed = false;
} else {
// success login set to 0
failAttempt = 0;
loginAllowed = true;
}
Meteor.users.update({_id: user._id}, {$set: {'profile.loginFaileAttempt': failAttempt}});
return loginAllowed;
});
你是不是保存失敗的嘗試,至少在這裏的代碼。因此,user.profile.loginFaileAttempt將始終保持爲0.最後一行failAttemp = 0;將永遠不會執行,雖然不是這裏的問題。 –