我想建立一个可以设置多家公司的网站。 每家公司都应拥有自己的实际业务数据数据库和自己的身份框架设置数据库。
为了做到这一点,我有一个简单的列表,其中包含引用不同数据库的公司,如前所述。
在其中注册用户是有效的,因为我只需要在创建时将applicationUserManagers存储在同一公司对象中。
但是,当我现在这样做:登录用户,之后将他登出然后再次登录,即使这在登录功能中:
var result = await ic.applicationSignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, shouldLockout: false);
返回“成功”,用户未登录,我再次发送到登录页面。
请告诉我还需要考虑什么。
答案 0 :(得分:0)
好的,我在那里失败了。
在登录时创建applicationUserManager时,我做了这个(除其他事项外):
ic = new IdentityConfig();
ic.applicationSignInManager = new ApplicationSignInManager(ic.applicationUserManager, HttpContext.Current.GetOwinContext().Authentication);
[...]
我发现从HttpContext这里获取的这个OwinContext与登录有关(显然它与身份验证有关)。但是,不是每次用户登录时都执行此行,而是将生成的IdentityConfig(它将ApplicationUserManager和ApplicationSignInManager与公司关联)存储在List中,并在之后的每次登录中重复使用它。 (实际上,这只是我试图通过保留在服务器应用程序上不会一直实际更改的小数据而不是一直从数据库中拉出来来保持高性能)
因此,在第一个用户登录后,每次都使用相同的owincontext,这在某种程度上不起作用。
解决方案是不要存储这个OwinContext并且每次都从头开始创建它。