gpt4 book ai didi

asp.net-mvc - GenericPrincipal 角色在 MVC View 中不可用

转载 作者:行者123 更新时间:2023-12-01 12:50:08 25 4
gpt4 key购买 nike

在我们的 MVC 应用程序中,我们绕过了 RolesProvider,而只是将我们的角色缓存在将被传递的 cookie 中。根据有关互联网的一些建议,我们正在利用 Application_AuthenticateRequest 事件,如下所示:

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
var user = HttpContext.Current.User;
if (user == null || !user.Identity.IsAuthenticated)
{
return;
}

// read the roles from the cookie and set a custom generic principal
var fi = (FormsIdentity)HttpContext.Current.User.Identity;
var httpCookie = HttpContext.Current.Request.Cookies["Roles"]; // custom cookie set during authentication
if (httpCookie != null)
{
string rolesCookie = httpCookie.Value;
var pmUserRoles = rolesCookie.Split(',');
GenericPrincipal gp = new GenericPrincipal(fi, pmUserRoles);
HttpContext.Current.User = gp;
}
}

我逐步完成了该方法,并在我们的一些角色中加入了几个条件,在设置当前用户后,User.IsInRole("rolename") 立即发挥作用.

但是,当尝试在 View 中进行相同的调用时:

@if(Request.IsAuthenticated)
{
if (User.IsInRole("role1") || User.IsInRole("role2"))
{
<!-- show something -->
}
else if (User.IsInRole("role3"))
{
<!-- show something else -->
}
}

无法访问角色。当我此时深入研究用户时,看起来角色甚至不存在,就在我确认用户在 AuthenticateRequest 事件结束时拥有它们之后。

This question有类似的问题,我本来打算在那里发表评论,但我想我不能因为我的低代表 - 但看起来这不仅仅是我的问题。

我也看了this question它有类似的方法,但这给了我相同的结果。

对正在发生的事情有什么建议或意见吗?

最佳答案

我终于找到了这个问题的答案,使用 Application_OnPostAuthenticateRequest 处理程序而不是 Application_AuthenticateRequest

this answer 提供(令人惊讶的是,这不是那个线程中被接受的!)。感谢 Tiago Matias!

关于asp.net-mvc - GenericPrincipal 角色在 MVC View 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com