ASP.NET Identityで自前のIUserStoreを実装する方法です。
まず、IUserを実装します。
Idが取得できて、UserNameが取得・設定できればそれでOKです。
public class MyUser : IUser
{
public string Id { get; private set; }
public string UserName { get; set; }
public MyUser(string id, string userName)
{
Id = id;
UserName = userName;
}
}
次にIUserStoreを実装します。
CreateAsync、DeleteAsync、などIUser実装クラスのCRUD処理を実装します。
例ではメモリ内のListに格納するようにします。
public class MyUserStore : IUserStore<MyUser>
{
private List<MyUser> _storedUsers = new List<MyUser>();
public Task CreateAsync(MyUser user)
{
_storedUsers.Add(user);
return Task.FromResult(0);
}
public Task DeleteAsync(MyUser user)
{
_storedUsers.Remove(user);
return Task.FromResult(0);
}
public Task<MyUser> FindByIdAsync(string userId)
{
var ret = _storedUsers.Where(u => u.Id == userId).SingleOrDefault();
return Task.FromResult(ret);
}
public Task<MyUser> FindByNameAsync(string userName)
{
var ret = _storedUsers.Where(u => u.UserName == userName).SingleOrDefault();
return Task.FromResult(ret);
}
public Task UpdateAsync(MyUser user)
{
var index = _storedUsers.IndexOf(user);
if (index < 0)
{
throw new ArgumentException("指定されたユーザーは登録されていません。");
}
_storedUsers[index] = user;
return Task.FromResult(0);
}
public void Dispose()
{
// do nothing
}
}
これで最低限の機能は実装しました。
さらにパスワードの保存、ロールの設定、外部サービスによるログイン対応などに対応するには
IUserPasswordStore<>、IUserRoleStore<>、IUserLoginStore<>などを必要に応じて実装します。
実装についてはMyUserに対応する情報が持てるようプロパティ・メソッドを増やして、
各インタフェースのメソッド内で格納・削除・更新・取得できるようにするだけなので割愛します。
public class MyUserStore : IUserStore<MyUser>,
IUserPasswordStore<MyUser>, IUserRoleStore<MyUser>,
IUserLoginStore<MyUser>
{
/// 省略
あとは UserManager = new UserManager<MyUser>(new MyUserStore());
として、UserManagerをかぶせて使用します。
UserManagerの使用例はASP.NETプロジェクトを作ってAccountControllerを見てください。
この例ではメモリ内のListにデータを保持しましたが、
データベースなりファイルなり他のデータソースに保存するUserStoreも簡単に実装できます。