ダウンロード サンプルファイル (41.7 KB)
UserStoreクラス実装
Redisを操作する準備ができたところで、今度はユーザー情報を操作するApplicationUserStoreクラスを実装していきます。
Redisハッシュ操作用フィールド定義
先述したuserIdsハッシュ、usersハッシュを操作するため、RedisHash型のフィールドを定義します(リスト2)。
private readonly RedisHash<String> userIds = new RedisHash<String>(RedisServer.Default, "userIds"); private readonly RedisHash<String> users = new RedisHash<String>(RedisServer.Default, "users"); }
CloudStructuresでRedisハッシュを操作するには、RedisHash<TKey>型を使います。userIds、usersともキーは文字列型なので、TKey型パラメーターにはstringを指定します。また、コンストラクタ引数では、先述したRedisServer型のオブジェクトと、作成するハッシュのキーを指定します。
パスワードハッシュ設定処理
ユーザー情報にハッシュ化したパスワードを設定するため、IUserPasswordStore<TUser>インターフェースのSetPasswordHashAsync非同期メソッドを実装します(リスト3)。なお、asyncキーワードをメソッドにつけることで、Taskクラスを戻り値とする非同期メソッドをわかりやすく実装できるようになります。
/// <summary>
/// ハッシュ化されたパスワードをユーザー情報に設定します。
/// </summary>
/// <param name="user">ユーザー情報。</param>
/// <param name="passwordHash">ハッシュ化されたパスワード。</param>
/// <returns></returns>
public async Task SetPasswordHashAsync(ApplicationUser user, string passwordHash)
{
user.PasswordHash = passwordHash;
}
ユーザー登録処理
データストアにユーザー情報を作成して登録するため、IUserStore<TUser>インターフェースのCreateAsync非同期メソッドを実装します(リスト4)。
/// <summary>
/// ユーザー情報をデータストアに作成します。
/// </summary>
/// <param name="user">ユーザー情報。</param>
/// <returns></returns>
public async Task CreateAsync(ApplicationUser user)
{
var result = await userIds.Set(user.UserName, user.Id);
if (result)
{
await users.Set(user.Id, user);
}
}
RedisHash<TKey>クラスのSetメソッドを呼び出し、userIds、usersハッシュにそれぞれ情報を登録します。Setメソッドの引数はRedisハッシュのfieldとvalueです。
なお、usersハッシュのvalueに直接ApplicationUserオブジェクトを渡していますが、CloudStructuresの既定の動作により、JSON形式にシリアライズされてRedisに設定されます。
ユーザー取得処理
データストアにRedisを使うようにしたため、前回作成したFindByNameAsyncメソッドも変更します(リスト5)。
/// <summary>
/// ユーザー名を使いユーザーを検索します。
/// </summary>
/// <param name="userName">ユーザー名。</param>
/// <returns>見つかったユーザー情報。見つからない場合はnullを返す。</returns>
public async Task<ApplicationUser> FindByNameAsync(string userName)
{
var id = await userIds.Get<string>(userName);
if (id.HasValue)
{
var user = await users.Get<ApplicationUser>(id.Value);
return user.HasValue ? user.Value : null;
}
else
{
return null;
}
}
RedisHash<TKey>クラスのGetメソッドを呼び出し、userIds、usersハッシュからユーザー情報を取得します。Getメソッドの引数は、Redisハッシュのfieldです。
まずuserIdsハッシュからユーザー名に対応するIDを取得します。見つかったかどうかは、Getメソッドの戻り値のHasValueプロパティで判定できます。
IDが取得できたら、今度は取得したIDを使いusersハッシュからユーザー情報を取得します。取得したIDの値はValueプロパティで取得できます。また、Getメソッドの型引数にAppliationUser型を指定することで、ユーザー情報を取得する際JSON形式からApplicationUserオブジェクトに自動的にデシリアライズされます。
この記事は参考になりましたか?
- ASP.NET Identity入門連載記事一覧
-
- ASP.NET 5に向けて知っておきたい、最新のASP.NET Identityのポイント
- ASP.NET Identityで任意のデータストアを使う
- ASP.NET Identityで独自の認証処理を行う
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高野 将(タカノ ショウ)
<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 、 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
