2

私の要件の1つは、クライアントがパスワードを再利用していないことを確認するために過去1年間のパスワード履歴エントリのうち最後の5つを確認することです。ASP.netコア2.0のパスワード履歴

私は既に、ユーザーエンティティにパスワードエンティティとパスワードコレクションを作成しています。

UserManager<TUser>から継承するカスタムユーザーマネージャを作成し、パスワードを追加/更新する方法をオーバーライドして履歴を作成する必要があります。また、PasswordValidator<TUser>を継承し、ValidateAsyncメソッドをオーバーライドするカスタムパスワードバリデーターを作成する必要があります。

.NET Core 2.0でこれらのカスタム実装をどのように登録するのですか? services.AddIdentityヘルパーをすべての依存関係注入呼び出しに置き換える必要がありますか?または、UserManagerPasswordValidatorの部分だけをオーバーライドする方法はありますか?

答えて

2

サービスを登録するだけで、デフォルトで登録されるサービスをAddIdentity()コールに置き換えることができます。依存性注入コンテナはすべてのの登録を維持しますが、サービスがインスタンスを要求するときには、最新の登録のみを使用します。だから、まったく同じ方法でサービスを登録し、元のサービスが登録されていることを確認するだけです。ですから、どのサービスがどのように登録されているかは疑問の余地があります。check the implementationあなたのケースでは

は、おそらくこのような何かをしたい:

services.AddIdentity<MyUser, MyRole>(); 
services.AddScoped<UserManager<MyUser>, CustomUserManager>(); 
services.AddScoped<IPasswordValidator<MyUser>, CustomPasswordValidator>(); 
+3

興味深い...実装を見ているとき、私は、彼らが 'services.TryAddTransient'を使用して気づきました。 Intellisenseによれば、これは既に登録されていない場合にのみサービスタイプを登録します。では、 'AddIdentity()'の呼び出しの前か後に登録するのが最善かどうか疑問です。両方を試して結果を投稿します。ありがとう! – Sam

+0

実際、 'TryAddScoped'と' TryAddTransient'の使用により、私は 'AddIdentity'を呼び出す前にカスタム実装を追加することができました。 – Sam

+0

これは知っておいしいです!報告してくれてありがとう:) – poke

関連する問題