ユーザー登録の仕組み
今度は、ユーザー登録の仕組みを、リスト1に登場したUserManagerおよびその関連クラスの定義を確認しながら紐解いていきましょう。これらのクラスは前述のとおり、Models/IdentityModels.csファイルに定義されています(リスト2)。
public class ApplicationUser : IdentityUser //(1) { } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> //(2) { public ApplicationDbContext() : base("DefaultConnection") { } } #region ヘルパー public class UserManager : UserManager<ApplicationUser> //(3) { public UserManager() : base(new UserStore<ApplicationUser>(new ApplicationDbContext())) //(4) { } }
(1)ApplicationUserクラス
このWebアプリケーションで扱うユーザー情報を定義しています。ASP.NET Identityでユーザー情報を表すIdentityUserクラスを継承します。
(2)ApplicationDbContextクラス
ユーザー情報をEntity Frameworkを用いて扱うために定義しています。ASP.NET Identityでユーザー情報をEFを用いて扱うためのIdentityDbContextクラスを継承します。これにより、EFを使ってユーザー情報の操作を行えます。
(3)UserManagerクラス
上記2クラスを使ってユーザー情報を管理するために定義しています。前述のとおり、ASP.NET Identityでユーザー情報を管理するためのUserManager<TUser>クラスを継承します。これにより、TUserに指定したユーザーオブジェクトの登録、変更などのいわゆるCRUD処理をはじめとした処理を行えます。
(4)UserManagerクラスのコンストラクタ
UserManagerクラスのコンストラクタでは、派生元のUserManager<TUser>クラスのコンストラクタを呼び出すようにしています。
ここで新たにUserStore<TUser>クラスが登場しました。UserStore<TUser>クラスはユーザー情報の保管処理を抽象化するためのクラスで、ASP.NET Identityで各種ユーザー関連情報を保管するために用意されたインターフェースを実装しています。例えば、ユーザー情報用のIUserLoginStore<TUser>インターフェース、パスワード情報用のIUserPasswordStore<TUser>インターフェースなどがあります。サンプルではこのUserStore<TUser>がEFを用いるように実装されており、必要な情報へのアクセスはすべて(2)で定義したApplicationDbContextクラスを通じて行います。
なお、このUserStore<TUser>クラスが実装している各インターフェースを独自に実装すれば、SQL Server以外のデータソースでユーザー情報を保管できます。