更改密码ASP.NET Core后登录失败

时间:2016-07-04 10:05:39

标签: asp.net-core asp.net-identity identity entity-framework-core .net-core

我正在使用ASP.NET Core 1.0和身份资料来验证和授权用户。这一切都很好,除了一件事:

如果用户重置或更改了密码,则在重新启动ASP.NET应用程序之前,他无法使用新凭据登录。表示新密码已成功保存在数据库中,但方法// Just create some test data. IEnumerable<bool> test = Enumerable.Range(0, 12).Select(x => x%3 == 0); // Compute the average number of items that are true, as a %. var average = 100 * test.Average(x => x ? 1.0 : 0.0); 不使用当前数据,而是使用旧数据。似乎在EF Core或SignInManager / UserStore中有类似缓存的东西。

注册后登录工作也很好,重置或更改密码后只是一个问题。

2 个答案:

答案 0 :(得分:3)

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

将DbContext与DI一起使用是ASP.NET Core中的一个大问题。 DbContext应该在一个非常小的范围内使用,用简单的using语句定义。不幸的是,ASP.NET Core身份使用在DI中注册的DbContext。更好的解决方案是将一个DbContext工厂注册到DI,以创建一个需要它的小范围DbContext加班。

答案 1 :(得分:2)

我也发现使用陈旧的DbContext我的身份验证中间件存在问题。

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

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

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