2012-10-28 26 views
0

我是ASP.NET新手,遇到一个奇怪的问题。ASP.NET MVC4已登录但仍需要登录

我参与succefully登录(登录我的局部视图显示使用我的用户名User.Identity.NameRequest.isAuthenticated是真实的),不过,当我试图访问受保护[Authorize(Roles="Teacher")]控制器(我登录作为一名教师) ,他几乎总是将我重定向到登录页面。因此,我登录并且可以访问网页,但是如果在我仍然需要登录后才刷新类似于30秒的内容,并知道我的用户名仍然是打印的,并且我似乎仍然记录下来。

任何想法?

+1

您使用的是IIS 7.5,IIS 8,IIS Express还是VS.NET Dev Server?当您调试应用程序或处于发布模式时会发生这种情况吗? –

+0

嘿,IIS Express处于调试模式! – spacenick

+0

好吧,它肯定似乎是一个角色问题。我做了以下事情:在HomeController中,如果Request.isAuthenticated为true,则重定向到另一个控制器。在另一个控制器中,如果用户不在特定角色(我所在的位置),则重定向到Index。这以无限循环结束,Chrome崩溃。所以它看起来像.NET不能加载角色或什么......有人已经看到了吗? – spacenick

回答

0

您使用的授权过滤器看起来正确。你有没有检查角色的拼写?也许角色是“教师”而不是“教师”或类似的东西。为了安全起见,请确保角色名称的大小写相同。

+0

角色名称是确切的,因为当我想访问一个特定角色的受保护控制器时,我可以访问它,但是我必须在登录表单中再次输入我的凭证,因为我知道我已经登录了! – spacenick

0

一个好的开始是弄清楚你的用户是什么样的Prinicipal。

在你的控制器中,把下面的和一个断点放在线上。

var user = User; 

用户将给你当前的委托人,并在调试器中查看它。当我遇到这样的情况时,这是因为我可能启用了窗体身份验证并启用了窗口角色管理器。

看到委托人会很快帮助您隔离问题。

2

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

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

} 
0

老师是登录? 而老师是角色? 是否为此登录的用户在webpages_UsersInRoles表中存在适当的记录?