2012-02-03 40 views
0

我目前使用默認的會員供應商運行MVC2網站。一切都很好,但現在我找到了忘記密碼功能的需求。使用默認的asp.net會員供應商在MVC 2中重置/忘記密碼功能

經過一些Google搜索後,我發現唯一的優秀實現是基於使用機器密鑰來實現安全性或問答功能。

這些實現的問題是我已經有了一個相當大的用戶羣。我現在不能將我的密碼換成機器密鑰,因爲我已經使用了散列系統。

passwordFormat="Hashed" 

我也不想強迫現有用戶在事後添加問題和回答。問題和答案也不太理想,就好像他們忘記了這些信息一樣,他們也不幸運。

我的理想實現是用戶將點擊忘記密碼,輸入他們的用戶名或電子郵件(理想的電子郵件)。然後,他們會收到一封電子郵件,其中包含他們當前的密碼(我相信這對我使用的散列方法來說是不可能的),一個新的隨機密碼被告知要更改,或者帶有令牌的鏈接,讓他們在點擊後重置密碼它。

有沒有什麼好的指南可以快速做到這一點?我所能找到的每件事都與使用機器密鑰方法或問題和答案有關。我很驚訝我找不到任何東西,因爲這是非常常見的網絡功能。我很驚訝它甚至不是MVC附帶的默認成員提供者的一部分。

我意識到令牌是最安全的,隨後是隨機密碼,但現在我對這三種情況都非常開放。

如果您需要更多信息,請讓我知道。

回答

2

如果用戶的電子郵件地址已經以某種方式與他/她的帳戶相關聯,那麼發送用戶電子郵件來更改他們的密碼是一個很好的解決方案。這將是理想的您的用戶名必須是電子郵件地址。這裏是我該怎麼做

  1. 在管理您的帳戶的控制器上創建一個ForgotPassword操作。 HttpGet版本只提供「請輸入電子郵件地址」視圖,而HttpPost版本驗證電子郵件地址,確保它屬於用戶。
  2. 如果電子郵件地址有效,請向用戶發送電子郵件。在該電子郵件中,您應該有一個格式爲「{您的帳戶控制器} ChangePassword?id = {請求密碼更改的用戶名稱,我建議您爭先恐後地安全}」的鏈接。「
  3. 您的HttpGet ChangePassword操作將採取id,將其映射到系統中的用戶。然後爲用戶提供相應的視圖以更改其密碼。
  4. 您的HttpPost ChangePassword操作將使用新密碼更新用戶舊密碼。

使用這種方法,您不必通過電子郵件向他們發送密碼,您基本上正在製作一項功能,允許用戶更改其密碼。