2

私は、ASP.NET Core 1.0とIDスタッフを使用して、ユーザーの認証と承認を行っています。パスワードの変更後にログインに失敗します。ASP.NETコア

ユーザーがパスワードをリセットまたは変更した場合、ASP.NETアプリケーションが再起動されるまで、新しい資格情報でサインインすることはできません。新しいパスワードがデータベースに正常に保存されたことを意味しますが、方法_signInManager.PasswordSignInAsync()は現在のデータを使用せず、古いデータを使用します。 EF CoreやSignInManager/UserStoreにキャッシュのようなものがあるようです。

登録後のログインも問題ありません。パスワードのリセットまたは変更後に問題になります。

+0

redisまたは一部のインプロセスメモリキャッシュを使用していますか? – Tseng

+0

いいえ、現在キャッシュは設定されていません。単にデフォルト設定で、何も特別なものはありません。 –

答えて

3

この問題の原因は次のとおりです。 Authは、間違った初期化を持ち、古いEF DbContextを使用する別のMiddleWareで実行されます。

DIでDbContextを使用することは、ASP.NETコアにとって大きな問題です。 DbContextは、単純なusingステートメントで定義されたかなり小さなスコープで使用する必要があります。残念ながら、ASP.NET Core IDはDIに登録されているDbContextを使用します。より良い解決策は、DbContextファクトリをDIに登録して、必要以上に小さなスコープのDbContextを作成することです。

+0

あなたの洞察力を共有してくれてありがとう、私は何時間も人を引き裂くことがわかりました。 –

+0

洞察は良いですが、私のような人形のためにはあまりありません。 DbContextファクトリを正しく登録する方法がわからないので、代わりにどこでも(新しいDbContext)を使用して終了します。 – AndrewBenjamin

2

また、古いミドルウェアで古いDbContextを使用している問題を発見しました。

一つの解決策は、次のコード行と認証ミドルウェアのIDリゾルバーでユーザーをリフレッシュすることでした。これに続いて

await _dbContext.Entry(userToVerify).ReloadAsync();

、私は最新のに対して、ユーザーの資格情報を確認することができましたデータ。

関連する問題