修改密码ASP后登录失败.净的核心



我正在使用ASP。NET Core 1.0和身份的东西来认证和授权用户。一切都很好,除了一件事:

如果用户重置或更改了他的密码,他就不能使用新的凭据登录,直到ASP. net重新启动。. NET应用程序重新启动。表示新密码成功保存在数据库中,但方法_signInManager.PasswordSignInAsync()不使用当前数据,而是使用旧数据。似乎在EF Core或SignInManager/UserStore中有类似缓存的东西。

注册后登录也很好,只是重置或更改密码后出现问题。

我也发现了一个使用过时DbContext的身份验证中间件的问题。

一种解决方案是使用以下代码行在认证中间件的身份解析器中刷新用户:

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

在此之后,我能够根据最新数据验证用户的凭据。

找到了问题的原因:Auth是在一个单独的中间件中完成的,该中间件具有错误的初始化并使用旧的EF DbContext。

在DI中使用DbContext是一个巨大的问题。净的核心。DbContext应该在一个非常小的范围内使用,用一个简单的using语句定义。不幸的是,ASP。. NET Core标识使用在DI中注册的DbContext。更好的解决方案是只向DI注册一个DbContext工厂,在需要时创建一个小范围的DbContext。

最新更新