請參閱以下更新:如何允許未經身份驗證的用戶重置密碼?
我使用ASP.NET SQL成員資格提供。
到目前爲止,我能夠允許用戶更改其密碼,但只有當他們認證或登錄到應用程序。 我真正需要的是用戶能夠通過電子郵件獲得鏈接。他們可以點擊此鏈接並重置密碼。例如:假設一個用戶忘記了他或她的密碼,他們可以訪問一個頁面,他們可以進入安全問題和答案;或他們的電子郵件地址。然後,他們會收到一封電子郵件,其中包含重置密碼的鏈接。
所有我到目前爲止是這樣的:只允許通過認證的用戶重置其密碼:
我不想使用恢復控制生成一個密碼。
public void ChangePassword_OnClick(object sender, EventArgs args)
{
MembershipUser user = Membership.GetUser(User.Identity.IsAuthenticated);
try
{
if (user.ChangePassword(OldPasswordTextbox.Text, PasswordTextbox.Text))
{
Msg.Text = "Password changed.";
}
else
{
Msg.Text = "Password change failed. Please re-enter your values and try again.";
}
}
catch (Exception e)
{
Msg.Text = "An exception occurred: " + Server.HtmlEncode(e.Message) + ".
try again.";
}
}
我可以創建存儲過程和使用字符串構建的電子郵件,但我不知道如何讓沒有認證用戶更改密碼。有沒有一種方法可以讓用戶在點擊鏈接時進行身份驗證。我不知道怎麼問這個。
感謝您閱讀:
更新:
好吧,我設法拿到了密碼使用此代碼復位:
protected void btnResetPassword_Click(object sender, EventArgs e)
{
string username = "ApplePie12";
MembershipUser currentUser = Membership.GetUser(username);
currentUser.ChangePassword(currentUser.ResetPassword(), txtResetPassword.Text);
}
這是我的計劃:
使此頁面公開,以便通過未經身份驗證的用戶訪問,但只能通過電子郵件鏈接訪問。
創建用於驗證用戶的存儲過程存在於用戶名中或由安全問題/答案存在。
如果他們存在,他們被送到包含令牌/ GUID
最後當他們點擊,他們將登陸這個頁面,要求他們更改密碼鏈接的鏈接。 * 鏈接一旦使用即失效。
我唯一的問題是:做以上所有需要關閉使用安全問題/答案在Web配置文件。
我真的很想將安全問題作爲用戶的選擇,以便通過電子郵件或安全問題進行驗證。如果這是不可能的,我將不得不創建某種帳號或用戶標識(不是成員身份用戶標識)作爲替代。
謝謝克里斯,我沒有想到這個:那麼我如何驗證令牌?我相信我可以生成一個GUID並將其哈希。一旦我知道如何驗證令牌,我就可以做到這一點。示例:我可以創建一個允許用戶輸入電子郵件或安全問題的文本框。如果它匹配一個GUID生成,驗證並通過電子郵件發送給用戶? – Asynchronous
這僅適用於存儲唯一電子郵件的情況。當用戶要求重置密碼時,您需要提供電子郵件並將令牌發送至電子郵件並將該對(電子郵件,令牌)存儲在某處。然後,當令牌回來時,您只需閱讀電子郵件,然後獲得用戶。 –
是的,我只使用唯一的電子郵件,不能重複*請參閱上面的更新。 – Asynchronous