株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

ASP.NET

ASP.NETユーザ管理(その9) パスワードのリセット

投稿日:

0001ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の9回目です。前回は、2要素認証を使ってみました。今回はパスワードリセットです。パスワードリセットですが、要するにパスワードを忘れた場合の処理です。デフォルトでWebFormのテンプレートに組み込まれているので、その処理を有効にするという変更です。(ホーム)\Account\Forgot.aspxです。

今回のソース一式はこちらです。今回の部分は(ISY07)ではじまるコメントを付けています。メール送信処理についてはアカウントを設定するか、メール送信処理を削除するか等で動作させてください。

まず、Forgot.aspxに以下のメッセージを追加して初期状態では非表示にしました。以下追加部分だけです。

<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <asp:Label ID="lblConfirm" runat="server" Text="メールを確認してパスワードを再設定してください。" Visible="False"></asp:Label>
    </div>
</div>

ビハインドコードが以下です。

using System;
using System.Web;
using System.Web.UI;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using ASPNETWebFormsIdentity.Models;

namespace ASPNETWebFormsIdentity.Account
{
    public partial class ForgotPassword : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //(ISY07)追加
            if (!IsPostBack) { 
                lblConfirm.Visible = false;
            }
        }

        protected void Forgot(object sender, EventArgs e)
        {
            if (IsValid)
            {
                // Validate the user password
                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
                ApplicationUser user = manager.FindByName(Email.Text);
                if (user == null || !manager.IsEmailConfirmed(user.Id))
                {
                    FailureText.Text = "The user either does not exist or is not confirmed.";
                    ErrorMessage.Visible = true;
                    return;
                }
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send email with the code and the redirect to reset password page
                string code = manager.GeneratePasswordResetToken(user.Id);
                string callbackUrl = IdentityHelper.GetResetPasswordRedirectUrl(code);
                
                //(ISY07)URL作成
                string domainName = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath;
                string url = domainName + callbackUrl;

                //(ISY07)HTMLテキストの作成
                string linktext = "このリンクをクリックすることによってパスワードをリセットしてください。  " + url;

                //manager.SendEmail(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>.");
                manager.SendEmail(user.Id, "パスワードのリセット", linktext);

                lblConfirm.Visible = true;
            }
        }
    }
}

処理としては、ユーザ登録の時と同様にリンクのテキストをメールで送信しています。メール送信の処理は、ASP.NETユーザ管理(その3)ユーザ登録時のメール確認でのメール送信と同じ実装が使われます。

これでこのシリーズは終了です。今回のシリーズの一連の処理は管理的な処理で実際にはこの管理の元に何かしらのサービスや、業務処理を構築して運用していくことになります。実際には、その何かしらの「サービス」や「業務処理」が一番大事な部分ですが、やはり、ユーザ管理、ロール管理は必要になってくるので取り上げました。

AdSense

AdSense

-ASP.NET

執筆者:

関連記事

no image

Microsoft AzureでASP.NETサイトを公開してみる(その1)概要と開発環境

Microsoft Azureのサイト上で、ローカル環境で開発したASP.NETのサイトを公開するまでの手順についてです。(※簡単にサイト公開までということで、データベースは利用しません。ご了承下さい …

no image

ASP.NETユーザ管理(その7)ユーザアカウントロック

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の7回目です。前回は、ロール管理を使ってみました。今回はユーザアカウントロックを使ってみます。ログイン時に規定の回数パスワード …

ASP.NET Web APIでデータ蓄積の続き(その2)グラフ表示

ASP.NET Web APIでデータ蓄積の続きの2回目です。前回は温度データを最新から一覧表示するページを作成しました。今回は温度データのグラフを表示するページを作成します。最終的に以下のように表示 …

ASP.NET Web APIでデータ蓄積(その4)ASP.NET ApiControllerクラスとView

ASP.NET Web APIでデータ蓄積の4回目です。前回はASP.NET ApiControllerクラスについて書きました。今回はViewと連携させてみます。 まずは前回ですが、以下のようなUR …

ASP.NET Web APIでデータ蓄積の続き(その1)データ表示ページ

ASP.NET Web APIでデータ蓄積というテーマで以下から始まるシリーズを書きました。まず以下のページが概要です。 ASP.NET Web APIでデータ蓄積(その1)ASP.NET Web A …