【问题标题】:Removing user from role and checking从角色中删除用户并检查
【发布时间】:2019-05-28 09:53:30
【问题描述】:

我有两个角色(freeUser、subscribedUser),当我尝试使用

从角色(订阅用户)中删除用户时
 await UserManager.RemoveFromRoleAsync(subscription.UserId, RoleName.SubscribedUser);

它成功地将他从 AspNetUserRoles 表中删除,但是当我再次检查以查看用户是否使用订阅时

     var roles = ((ClaimsIdentity)User.Identity).Claims
            .Where(c => c.Type == ClaimTypes.Role)
            .Select(c => c.Value);

        var enumerable = roles as IList<string> ?? roles.ToList();

或使用User.IsInRole(RoleName.SubscribedUser)

真的回来了!即使我检查了 AspNetUserRoles 表并且他已被删除,该用户仍处于角色 subscribedUser 中

【问题讨论】:

  • 删除您的cookies历史记录,检查不同的浏览器或重新启动应用程序。有时,会话会验证用户甚至不再存在于数据库中。
  • Closing and start 什么都没做,但是在我清理项目之后它工作了....所以这会导致生产环境出现问题吗?就像用户订阅结束时一样。
  • 并将评论添加为答案,以便我接受。

标签: asp.net-mvc asp.net-web-api asp.net-identity asp.net-roles


【解决方案1】:

删除您的 cookie 历史记录,检查不同的浏览器或重新启动应用程序。有时,会话会验证用户甚至不再存在于数据库中。

【讨论】:

  • 不是真的,它不会在 prod 环境中造成问题,但我不确定您是如何实现会话和登录机制的。一旦您从订阅表中删除用户,然后清除会话和/或再次重定向到登录页面。
  • 我正在为 Xamarin 移动应用程序使用基于令牌的身份验证...但应用程序中有一些功能适用于订阅用户,因此我需要检查用户何时尝试访问。
  • 当订阅时间结束时,用户应该从订阅的用户角色中删除。
  • 那么很简单,只要您从订阅计划中删除用户然后刷新令牌(我假设承载令牌基于授权类型密码并且具有较短的到期时间)然后这些功能(通过访问服务器 api 控制器)将不会被授权给该用户。你觉得这有意义吗?
  • 当用户从订阅计划中删除时,可以在服务器中实现令牌撤销机制,然后同时撤销他的令牌,然后当用户(在他的移动应用程序中存储了有效的令牌)将失效在服务器中,因为该用户被撤销。我不在电脑 atm 前面,否则我会给出一些示例代码。
猜你喜欢
  • 2020-11-20
  • 2021-07-31
  • 2017-03-06
  • 2022-10-17
  • 2017-04-25
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多