我正在使用具有特殊角色“必须更改密码”的 ASP.NET 角色。如果用户超过 90 天没有更改密码,他们将自动添加到此角色。这发生在用户登录过程中。然后,授权规则拒绝该角色访问除“更改密码”页面之外的所有应用程序。
通常这很好用,但是在使用角色缓存 cookie 缓存角色时会出现问题。在登录过程中会检查密码上次更改日期,如果 > 90 天,则将用户添加到“必须更改密码”角色。在同一个页面请求中,我随后调用 Roles.IsUserInRole("Must Change Password") 来决定是否将用户重定向到更改密码页面。这就是它失败的地方 - 似乎启用角色缓存 cookie 后,Roles.IsUserInRole("Must Change Password") 没有意识到我已经更改了该用户的角色映射,并返回 false。但是,在下一页请求中,Roles.IsUserInRole("Must Change Password") 返回 true。
这种行为是通过设置 cacheRolesInCookie="false" 来解决的,但这似乎是一个高昂的代价。有没有其他方法可以解决这个问题?