Asp.net mvc ASP.NET MVC4已登录,但仍需要登录

Asp.net mvc ASP.NET MVC4已登录,但仍需要登录,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我是ASP.NET新手,现在面临一个奇怪的问题 我已成功登录(我的登录部分视图在请求时使用User.Identity.Name显示我的用户名。isAuthenticated为true),但是,当我尝试访问受[Authorize(Roles=“Teacher”)]保护的控制器时(我以教师身份登录),他几乎总是把我重定向到登录页面。因此,我登录,我可以访问网页,但如果我刷新了30秒后,我仍然必须登录知道我的用户名仍然是打印的,我似乎仍然是登录 有什么想法吗?您使用的授权筛选器看起来是正确的。你检查过

我是ASP.NET新手,现在面临一个奇怪的问题

我已成功登录(我的登录部分视图在
请求时使用
User.Identity.Name
显示我的用户名。isAuthenticated
为true),但是,当我尝试访问受
[Authorize(Roles=“Teacher”)]
保护的控制器时(我以教师身份登录),他几乎总是把我重定向到登录页面。因此,我登录,我可以访问网页,但如果我刷新了30秒后,我仍然必须登录知道我的用户名仍然是打印的,我似乎仍然是登录


有什么想法吗?

您使用的授权筛选器看起来是正确的。你检查过这个角色的拼写了吗?也许这个角色是“老师”而不是“老师”之类的。为了安全起见,请确保角色名称的大小写相同。

一个好的开始是找出您的用户是哪种类型的Prinicipal

在控制器中,将以下内容和断点放在直线上

var user = User;
用户将为您提供当前主体,并在调试器中查看它。当我遇到这样的情况时,这是因为我可能启用了窗体身份验证,并且打开了windows角色管理器


查看主体是什么将快速帮助您隔离问题。

在成功登录后检查已验证用户具有哪些角色。将以下行添加到HomeController中的操作方法中。例如:

public void CheckRoles()
{
    foreach (var role in Roles.GetRolesForUser())
    {
        Response.Write(role + "<br/>");
    }

}
public void CheckRoles()
{
foreach(Roles.GetRolesForUser()中的var角色)
{
响应。写入(角色+“
”); } }
老师正在登录吗?
老师是什么角色?

对于此登录用户,是否在网页\用户角色表中存在相应的记录?

您使用的是IIS 7.5、IIS 8、IIS express还是VS.NET开发服务器?这是在调试应用程序还是在发布模式下发生的?嘿,IIS Express在调试模式下!好吧,这显然是个角色问题。我做了以下工作:在HomeController中,如果Request.isAuthenticated为true,则重定向到另一个控制器。在另一个控制器中,若用户不在给定的角色(我在其中),则重定向到索引。这在无限循环中结束,Chrome崩溃。所以看起来.NET无法加载角色或其他内容。。。有人已经看到了吗?你能发布你的web.config角色管理器部分吗?顺便说一句,没有添加特殊的cookie,我只有.ASPXAUTH左右的cookieRoles名称是准确的,因为当我想访问某个特定角色的受保护控制器时,我可以访问它,但我必须在登录表单中再次输入我的凭据,知道我已经登录了!