通常,ResetPassword(string passwordAnswer)回傳會員用戶的新密碼。ChangePassword(string oldPassword,string newPassword)有兩個引數:舊密碼和新密碼。我對此沒有意見,但在下面的代碼中:
string pwd = mu.ResetPassword(k.SecretAnswer);
mu.ChangePassword(pwd, k.password);
return RedirectToAction("Login");
根據此代碼,pwdis 包含舊密碼,但ResetPassword()方法回傳一個新的隨機密碼。那么如何pwd代表舊密碼呢?該方法不應該ResetPassword()回傳新密碼嗎?我錯過了什么?背后的邏輯是什么?
uj5u.com熱心網友回復:
重置密碼創建了一個必須在首次使用時重置的密碼。它更多地用作令牌(在身份驗證領域)而不是實際密碼。
因此,當您致電時,您將令牌mu.ChangePassword(pwd, k.password);“交換”為“普通”密碼。pwd
如果您在上一行中跳過了更改密碼并嘗試使用pwdfromReset方法登錄,則不會成功。UI 會強制您更改密碼,然后使用新密碼登錄。
這樣做的目的是讓用戶是唯一一個曾經以純文本(即未加密)形式看到其密碼的用戶。
編輯:到底什么是令牌,令牌和密碼有什么區別?
簡短的答案):
- 密碼可以多次使用,而令牌只能使用一次。
- 兌換令牌時驗證密碼。_ _ _
- 每次使用都需要驗證密碼。一個令牌需要在給出之前進行驗證。
雖然令牌和密碼都用于獲得訪問權限,但它們的使用方式使它們與眾不同。
讓我們嘗試一些真實世界的示例(假設這些示例與我們的用例沒有 100% 一致,但我相信它們會有所幫助)。
您的 ATM 卡的 PIN 是密碼,因為:
- 這是秘密
- 每次使用時都會對其進行驗證
- 你可以一遍又一遍地使用它
如果您將西裝帶到干洗店,他們會給您一張票(帶有號碼),您將用它來取回您的西裝。這是一個令牌,因為:
- 您必須親自持有機票才能取回您的西裝
- 如果你有票,你會得到西裝。無話可問。當你放下它時,你證明這是你的西裝。
- 一旦你使用它,這張票就一文不值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/459885.html
標籤:C# asp.net-mvc asp.net 会员
