当用户已登录时,如何重定向到未授权的页面而不是登录页面?

时间:2009-11-14 14:30:30

标签: c# .net asp.net-mvc

当用户已登录但角色不正确时,如何设置我的授权(Roles =“blah”)令牌以重定向到“您无权执行此操作”?目前它重定向到登录页面,这不是我们所追求的。我们认为将用户重定向到此页面会让他们感到困惑,因为他们已经登录。但是如果他们没有登录,则应该重定向到登录页面。

4 个答案:

答案 0 :(得分:4)

AuthorizeAttribute的设计方式是首先查看用户是否经过身份验证,然后查看他是否在角色中。如果不满足任何这些条件,它将返回返回HttpUnauthorizedResult,然后将响应代码设置为401.为了达到您想要的效果,您需要实现自己的IAuthorizationFiler。< / p>

答案 1 :(得分:1)

您的登录页面可以检查用户是否经过身份验证(HttpContext.User.Identity.IsAuthenticated),然后重定向到其他页面。

或者,对经过身份验证的用户进行不同的呈现(隐藏登录表单,而是显示相应的消息)。

答案 2 :(得分:1)

您应该查看Kazi Manzur Ra​​shid关于自定义授权提供商的博文:http://weblogs.asp.net/rashid/archive/2009/09/06/asp-net-mvc-and-authorization-and-monkey-patching.aspx。要做得恰当,它可能是一个非常复杂的野兽。所以它归结为几个选项,2个相当简单的方法来做“错误”和一个相当复杂的方式来做“正确”。你的来电。无论哪种方式 - 值得阅读博客文章。

答案 3 :(得分:0)

AuthorizeAttribute的设计方式是首先查看用户是否经过身份验证,然后查看他是否在角色中。如果不满足任何这些条件,它将只返回HttpUnauthorizedResult,而IAuthorizationFiler又将响应代码设置为401。

要实现您的目标,您需要实现自己的{{1}}。