我是 ASP.NET 的新手,遇到了一个奇怪的问题。
我已成功登录(我的登录部分视图显示我的用户名使用User.Identity.Name
whenRequest.isAuthenticated
为真),但是,当我尝试访问受保护的控制器时[Authorize(Roles="Teacher")]
(我以教师身份登录),他几乎总是在重定向我到登录页面。所以我登录了,我可以访问网页,但是如果我在登录后刷新大约 30 秒,我知道我的用户名仍然被打印并且我似乎仍然被登录。
有任何想法吗?
我是 ASP.NET 的新手,遇到了一个奇怪的问题。
我已成功登录(我的登录部分视图显示我的用户名使用User.Identity.Name
whenRequest.isAuthenticated
为真),但是,当我尝试访问受保护的控制器时[Authorize(Roles="Teacher")]
(我以教师身份登录),他几乎总是在重定向我到登录页面。所以我登录了,我可以访问网页,但是如果我在登录后刷新大约 30 秒,我知道我的用户名仍然被打印并且我似乎仍然被登录。
有任何想法吗?
在成功登录后检查经过身份验证的用户具有哪些角色。将以下行添加到 HomeController 中的 Action 方法中。例如:
public void CheckRoles()
{
foreach (var role in Roles.GetRolesForUser())
{
Response.Write(role + "<br/>");
}
}
老师是登录?老师是角色?对于这个登录的用户,是否在 pages_UsersInRoles 表中存在适当的记录?
一个好的开始是弄清楚你的用户是什么类型的委托人。
在您的控制器中,将以下内容和一个断点放在该行上。
var user = User;
用户将为您提供当前的主体并在调试器中查看它。当我遇到这样的情况时,这是因为我可能启用了表单身份验证并打开了 Windows 角色管理器。
查看 Principal 是什么将很快帮助您隔离问题。
您使用的授权过滤器看起来是正确的。你检查过角色的拼写吗?也许角色是“老师”而不是“老师”或类似的角色。为了安全起见,请确保角色名称的大小写相同。