【T9a】簡易ブログソフトウェアの作成 Part.Ⅰ ~ 認証機能の組み込み(11/14)
プロジェクトタイプ | ASP.NET Core Web アプリ(Model-View-Controller) |
---|---|
プロジェクト名 | T9a |
ソリューション名 | PIT9 |
ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
9a-11. モデルクラスに対するカスタム検証ロジックの実装
前節までにAccounts
コントローラーにユーザーの追加(≒新規登録)機能を実装したが,実は現段階では「パスワード(確認)」の欄は全く機能していない .
試しに「パスワード(確認)」に「パスワード」の欄とは異なる値を入力してユーザーを作成してみよう(空にはできないので注意). ユーザー名やパスワードが適切なものであれば,二つの入力欄の入力値が食い違っていてもユーザーの作成が成功してしまうはずである(_).
この欄の入力内容は全くチェックしていないため,「パスワード(確認)」の入力欄はお飾りとなってしまっている. このチェックをアクションメソッドで行ってもよいが, モデルクラスにこのチェックを埋め込むことが可能である . 今回はこの方法でチェックを実装してみよう. Models/NewUserInfo.cs を_に示すように変更しよう.
|
|
モデルクラスにIValidatableObjectインターフェースを
実装している.このインターフェースのインターフェースメソッドValidate()
メソッドを実装することで,モデルクラスの値の検証ロジックを
カスタマイズすることができる.ここではPassword
プロパティ(「パスワード」)とPasswordConfirmation
プロパティ(「パスワード(確認)」)の値が
一致していることを検証しており,そうでなければyield returnを
使ってエラーを報告している.yield return
はIEnumerable<T>
を返すメソッドやプロパティで使用できるC#の構文の一つであるが詳細は省略する.
詳しい内容を知りたい者はyield contextual keyword - C# Reference - Microsoft Docsなどを読むとよい.
ちなみにIValidatableObject
を使った入力値の検証は,データアノテーションを用いたチェックと異なりサーバー側で行われる.
ここまで書けたら実行してみよう.プロジェクトを起動して「ログイン」のリンクをクリックしadmin
として
ログインしよう.プロジェクト起動時にログイン済みの場合は画面上部の「ユーザー一覧」のリンクをクリックすると
ユーザー一覧の画面(Index
)が表示される.「新規ユーザー登録」のリンクをクリックして,ユーザーの新規登録画面(AddUser
)を表示させる.
先ほどと同じように「パスワード」と「パスワード(確認)」に食い違った値を入力して,ユーザーの作成を試みてみよう(_).
先ほどとは異なり,今回はユーザーの作成がエラーとなるはずである(_).
このエラーメッセージは,<div asp-validation-summary="All"></div>
のエラーメッセージのリストの一部として表示される.