ログイン
続いて、テンプレートで生成された「ログインページ」にて、未確認ユーザーがログインできないように変更を加えます。それには、ユーザー情報の確認を行う処理の最初で、未確認のユーザーをブロックするようにします(リスト3)。
protected void LogIn(object sender, EventArgs e) { if (IsValid) { // ユーザーのパスワードを検証します var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>(); //(1)メールアドレスからユーザー情報取得 var user = manager.FindByName(Email.Text); if (user != null) { //(2)ユーザーが確認済か判定 if (manager.IsEmailConfirmed(user.Id) == false) { // ユーザーが未確認 FailureText.Text = "ユーザーが確認されていません。送付されたEメールに従い、ユーザーの確認を行ってください。"; ErrorMessage.Visible = true; return; } } var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>(); …(略)… } } }
(1) ユーザー情報取得
UserManager<TUser>クラスのFindByName拡張メソッドを用いて、メールアドレスからユーザー情報を取得します。これは、パスワードの検証を行う前に、アカウントの確認が済んでいるかどうかを検証するためです。
(2) ユーザーが確認済か判定
UserManager<TUser>クラスのIsEmailConfirmed拡張メソッドを用いて、ログインに使用したユーザーが確認済みであるかどうか判定します。判定結果が未確認であるなら、エラーメッセージを表示してログイン処理を中断します。
以上で、アカウントの確認を行うメインロジックについての実装が完了しました。
アカウントの確認の動作確認
それでは、実際にアカウントの確認の動作を確認してみましょう。
まず、Webアプリケーションを実行し、ユーザーの登録を行います(図1)。すると、ユーザーの登録処理が行われた後にアカウントの確認メールが送信されます。また、確認メールを送信したことをユーザーに通知するページが表示されます(図2)。
![図1 ユーザーの登録](http://cz-cdn.shoeisha.jp/static/images/article/8181/8181_001.gif)
![図2 確認メール送信ページ](http://cz-cdn.shoeisha.jp/static/images/article/8181/8181_002.gif)
アカウントの確認が済んでいないこの時点でログインしようとすると、アカウント未確認のエラーとなりログインできません(図3)。
![図3 アカウント未確認時のログイン失敗](http://cz-cdn.shoeisha.jp/static/images/article/8181/8181_003.gif)
次にアカウントの確認を行います。
登録したメールアドレス宛に、アカウントの確認のためのリンクを含んだメールが送信されていますので、メーラーで開きます(図4)。そして、メールに含まれるリンクをクリックすると、アカウントの確認ページに移動し、確認処理が行われます(図5)。
この後、アカウントの確認ページに表示されたリンクなどからログインページに移動してログインすると、今度はログインに成功します。
![図4 アカウントの確認メール](http://cz-cdn.shoeisha.jp/static/images/article/8181/8181_004.gif)
![図5 アカウントの確認ページ](http://cz-cdn.shoeisha.jp/static/images/article/8181/8181_005.gif)