2009-08-22 9 views
14

私は、ASP.NET MVCデモに付属の標準SqlMembershipProviderを使用しています。ASP.NET MVCで「パスワードをお忘れですか?」を実装する方法を教えてください。

私は自分のサイトに「パスワードをお忘れですか?」リンクを実装することに興味があります。

この機能を実装する正しい方法は何ですか?パスワードを一時的なもので上書きして、登録されたメールにメールで送信する必要がありますか?

答えて

8

プロバイダが自動的にリセットを行います。

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.resetpassword.aspx

サンプルだけでブラウザに新しいパスワードを返す代わりに、ユーザーをメールが、で構成することができます秘密の質問/回答を使用していますプロバイダ。

このサンプルでは、​​パスワードや電子メール、それを取得します。

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.getpassword.aspx

私はどちらかのアプローチが安全だと思います。ユーザーがアカウントをハックするために質問/回答と電子メールパスワードを知っておく必要があるため、ステップバイステップの電子メールは少し安全です。

私はこれらのサンプルがMVCを使用していないことを認識していますが、あなたが動くのに十分だと思います。 :)

10

アプリケーションの性質に基づいて、忘れてしまったパスワードのベストプラクティスは、ユーザーが3〜5の最大のためにシークレット/質問を確認できるようにし、次の順序

  1. にする必要があります試み
  2. 検証が成功したら、ランダム生成パスワードと有効期限24hrsの電子メールを送信します。
  3. 電子メールにはののみが含まれていますが、ユーザー名とパスワードの両方は含まれていない必要があります。
  4. ユーザーが一時パスワードでログインすると、ホームページに行く前に、ユーザーは新しいパスワードを作成する必要があります。
6

URLを推測することは不可能なリンクをユーザに電子メールで送信する方がよいでしょう(ランダムなGuidが含まれていることをユーザーがクリックすると、パスワードをリセットできます)。一つだけ使用するために、設定時間後に期限切れにする必要があります。

5

それはあなたが使用しているメンバーシッププロバイダーの種類によって異なります。 しかし、私は詳細については、認証のためのシンプルなメンバシッププロバイダを使用することをお勧めします please visit the following link

ここにありますあなたのためのコード

[HttpPost] 
[AllowAnonymous] 
public ActionResult ForgotPassword(ForgotPasswordModel model) 
    { 
     . 
     . 
     . 
     . 
       if (WebSecurity.UserExists(model.UserName)) 
       { 
       var token = WebSecurity.GeneratePasswordResetToken(model.UserName, 60); 
        . 
        . 
        . 
        .       
        // send this token by email 
       } 
       else 
       { 
        ModelState.AddModelError("", "Could not find User"); 
       } 
      } 
     return View(model); 


    } 

[HttpPost] 
    public ActionResult ResetPassword(ResetPasswordModel model) 
    { 
     string token = Request.Params["token"]; 
     if (!string.IsNullOrEmpty(token)) 
     { 
      if (WebSecurity.ResetPassword(token, model.NewPassword)) 
      { 
     // send email…….. or           
       return View(); 
      } 
     } 
関連する問題