我有一个web api 2项目,我使用的是Asp.net Identity and Entity框架。 我发现当我更改密码时,旧密码仍然有效,但新密码会给我错误(无效授权)。
我确定更改密码正常工作...实际上在数据库中,(哈希)密码的值会正确更改。
更新
我明白了为什么。 {http:1}}(或我在其中使用的用户管理器)不是每个http请求实例化的。它似乎是一个单身人士。问题是它在启动和停止时是实例化的,所以就像它继续使用第一次登录的数据一样,这些数据被缓存(由实体框架)。
这是我如何配置authorizationServerProvider
类:
authorizationServerProvider
如何避免登录使用缓存数据?
谢谢
答案 0 :(得分:0)
您可以尝试:
使用AsNoTracking()
丢弃DbContext并创建一个新的
调用GetDatabaseValues()以获取单个实体的更新值
答案 1 :(得分:0)
我遇到了与UseOAuthAuthorizationServer和DI相同的问题。上次我在使用Autofac时遇到这个问题,但这与其他DI框架有关。问题是我们有中间件存储的OAuthAuthorizationServerProvider的静态实例,因此不涉及DI。 我的解决方案是在每个方法中获取OAuthAuthorizationServerProvider中的依赖项,如下所示:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var scope = context.OwinContext.GetAutofacLifetimeScope();
var userManager = scope.Resolve<ApplicationUserManager>();
.........
}
我的容器初始化:
public static IContainer Configure(IAppBuilder appBuilder, HttpConfiguration config)
{
var containerBuilder = new ContainerBuilder();
.... registrations here ....
var container = containerBuilder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
appBuilder.UseAutofacMiddleware(container);
appBuilder.UseAutofacWebApi(config);
return container;
}
你也可以使用其他DI容器做这样的事情。