Visual Studio Express 2012 for Web でいってみる 19.ログイン認証あたり3 パスワードのリセット
http://msdn.microsoft.com/ja-jp/library/webmatrix.webdata.websecurity.resetpassword(v=vs.111).aspx
ここの「説明」に以下の記述がありました。
新しいパスワードを提供するには、次の手順を実行します。
1.ユーザーが電子メール アドレスを入力できるフィールドを含むパスワード リセット ページを作成します。
2.ユーザーがパスワード リセット ページで電子メール アドレスを入力した場合は、
電子メール アドレスが有効なユーザーを表していることを確認します。
有効なユーザーであることを確認したら、
GeneratePasswordResetToken(String, Int32) メソッドを呼び出してパスワード リセット トークンを生成します。
3.サイトの確認ページを指し、リンクの URL のクエリ文字列パラメーターとしてトークンを含むハイパーリンクを作成します。
4.リンクを電子メール メッセージでユーザーに送信します。
電子メール メッセージを受信したユーザーは、リンクをクリックして確認ページを呼び出します。
5.URL パラメーターからトークンを抽出し、ユーザーが新しいパスワードを入力できるようにする確認ページを作成します。
6.ユーザーが新しいパスワードを送信したら、ResetPassword(String, String) メソッドを呼び出して、
パスワード リセット トークンと新しいパスワードを渡します。
トークンが有効である場合、パスワードはリセットされます。
トークンが有効ではない場合 (有効期限が切れている場合など) は、エラー メッセージを表示します。
http://www.makcraft.com/blog/meditation/2011/06/06/user-authentication-using-webmatrix-webdata-websecurity-1/
徒然なブログ WebMatrix.WebData.WebSecurity を利用したユーザー認証(その2)
http://www.makcraft.com/blog/meditation/2011/06/13/user-authentication-using-webmatrix-webdata-websecurity-2/
SMTP Over SSL 接続で配送依頼を行う DLL
http://www.makcraft.com/blog/meditation/2011/05/08/dll-that-does-delivery-request-by-smtp-over-ssl/
SMTP Over SSL 接続で配送依頼を行う DLL の更新
http://www.makcraft.com/blog/meditation/2011/05/20/update-smtp-over-ssl-dll/
MakCraft SmtpOverSsl Version 1.0.3 [2011年5月24日]
http://www.makcraft.com/tools/4-programs/15-smtpoverssl.html
標準にメールアドレスの入力を追加
<ログインページ>
「パスワードをお忘れの場合はパスワードをリセットしてください。」のリンクを追加。
<リセット指示ページ>
ユーザー名とメールアドレスを入力
データベース内のテーブル[UserProfile]と一致することをチェックし、OKなら
<リセット情報メール>
ハイパーリンクは[Account]コントローラの[PasswordReset]メソッド。その後ろに[?resetToken=....]のパラメータで構成されています。
このハイパーリンクをクリックすると
<新しいパスワードの登録ページ>
新しいパスワードを入力して[リセット]クリックで、WebSecurity.ResetPasswordが呼び出され、新しいパスワードが登録され
これで新しいパスワードでログインが可能になります。
以上、パスワードのリセット機能は、ほぼ「徒然なブログ」からいただいたスクリプトやdllで構築することができました。
MVC4で動作させるために少し変更した部分は、
1.SMTP 接続の設定
上記ブログでは、プロジェクト直下に「_AppStart.cshtml」を追加しそこに記述していますが、私の場合は、コントローラから呼び出すスクリプトでセットするようにしました。
2.View
[ForgotPassword.cshtml]と[PasswordReset.cshtml]のjavascriptの読み込み部分を
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
とバンドル機能を使うようにしました。
あと、見た目のデザイン、と[UserProfile]の仕様の異なる部分の調整を行いましたが、大きくはこの2点の変更を行うことで完了することができました。
今回は以上です。