c# - 根本不调用 ASP.MVC IUserRoleStore<>

标签 c# asp.net-mvc asp.net-identity

我已经为我的 Web 应用程序实现了自定义用户存储。到目前为止一切正常。 现在我想扩展商店类,以支持角色。我实现了以下接口(interface):

IUserStore<UserViewModel>, IUserLockoutStore<UserViewModel, string>, IUserPasswordStore<UserViewModel, string>, IUserTwoFactorStore<UserViewModel, string>, IUserRoleStore<UserViewModel, string>, IRoleStore<RoleModel, string>

并使用 Owin AppBuilder 注册服务如下:

var ctx = UnityMvcActivator.Context.Container;
app.CreatePerOwinContext(() => ctx.Resolve<WebUserManager>());
app.CreatePerOwinContext(() => ctx.Resolve<RoleManager>());
app.CreatePerOwinContext(() => ctx.Resolve<WebApplicationUserStore>());

如果我回到我的 Controller 并调用 User.IsInRole(Constants.Roles.COMPANY_OWNER)不会调用商店来获取用户的角色。我想有某种缺失的链接,但我找不到它。 我还实现了一个 UserManager<UserViewModel, string>SupportsUserRole属性显式设置为 true,这完全没有区别。

最佳答案

User.IsInRole 不检查您的数据库,只检查当前用户的 cookie。它将为您提供存储在 cookie 中的角色,但这些角色可能与您在数据库中拥有的角色不同。如果用户角色自上次刷新 cookie 后发生变化,则可能会出现差异。

如果您需要检查数据库中的角色,请使用 UserManager.IsInRoleAsync( MSDN )

关于c# - 根本不调用 ASP.MVC IUserRoleStore<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782898/

相关文章:

javascript - 如何预填充下拉列表

c# - 当窗口不在焦点 C# 中时,监听器丢失

c# - 密码保护 SQLite 数据库。是否可以?

c# - 使用参数调用resx

asp.net-mvc - 路由约束破坏了授权属性过滤器 - MVC 4

asp.net-core - 是否可以更改 UserManager<T> 的生命周期?

asp.net-core - 根据 Active Directory 对用户进行身份验证时存储 ASP.NET Core 授权声明的最佳实践?

c# - 编译器会优化集合初始化吗?

c# - 为什么 Tuple<T1...TRest> 中的 TRest 不受约束?

asp.net-core - 使用 .AddIdentityServerJwt() 时,.NET Core Razor Pages 应用程序的身份验证不适用于没有 "/Identity"路由的 View