当用户已经登录但未处于正确角色时,如何将我的授权(角色=“blah”)令牌设置为重定向到“您无权执行此操作”?目前它重定向到登录页面,这不是我们所追求的。我们觉得用户在他们已经登录时被重定向到这个页面是令人困惑的。但是,如果他们没有登录,它应该重定向到登录页面。当用户已经登录时,如何重定向到非授权页面而不是登录页面?
回答
AuthorizeAttribute的设计方式是先查看用户是否已通过身份验证,然后查看他是否在角色中。如果任何这些条件不满足,它将返回返回HttpUnauthorizedResult,这反过来将响应代码设置为401.为了实现你想要的,你将需要实现你自己的IAuthorizationFiler。
您的登录页面可以检查用户是否已通过身份验证(HttpContext.User.Identity.IsAuthenticated),然后重定向到其他页面。
或者,对于经过身份验证的用户(隐藏登录表单并改为显示相应的消息)进行不同的呈现。
你应该看看Kazi Manzur Rashid关于定制授权提供者的博客帖子:http://weblogs.asp.net/rashid/archive/2009/09/06/asp-net-mvc-and-authorization-and-monkey-patching.aspx。它可以是一个相当复杂的野兽,正确做到这一点。所以可以归结为几种选择,两种相当简单的做法是“错误的”,一种是相当复杂的做法“正确”。你的来电。无论哪种方式 - 这是值得阅读的博客文章。
AuthorizeAttribute
的设计方式是先查看用户是否已通过身份验证,然后查看他是否在角色中。如果任何这些条件不满足,它将简单地返回一个HttpUnauthorizedResult
,这反过来会将响应代码设置为401.
要达到您想要的效果,您需要实现自己的IAuthorizationFiler
。
你当然应该熟悉接口。 – ALIRA 2015-10-04 14:38:56
- 1. 如何将未经授权的用户重定向到Laravel的登录页面?
- 2. 如何使授权属性返回而不是重定向到登录页面
- 3. ASP.NET将未经授权的用户重定向到默认/登录页面
- 4. “反向”授权页面重定向到登录
- 5. 如何在用户未登录时将用户重定向到登录页面
- 6. 如何重定向到注册页面而不是登录?
- 7. Active Admin成功登录重定向到用户登录页面
- 8. 登录页面重定向
- 9. 用户登录后页面重定向
- 10. 重定向用户登录页面
- 11. LightOpenId不重定向到登录页面
- 12. 如何确定登录页面上是否有某个用户已经登录?
- 13. 重定向到登录页面,如果没有登录到facebook
- 14. 如何解决登录页面,而不是重定向
- 15. CookieAuthentication - 当ExpireTimeSpan结束时如何重定向到登录页面?
- 16. 自举登录按钮不会重定向到登录页面
- 17. 成功登录后不断重定向到登录页面
- 18. 如果用户已经登录到Django中,如何从登录页面重定向?
- 19. 如何在页面刷新后重定向到登录页面
- 20. 重定向到https登录页面
- 21. 重定向到登录页面/彩盒
- 22. 重定向到IFrame的登录页面
- 23. asp.net重定向到登录页面
- 24. 重定向到登录页面
- 25. 重定向到登录页面策略
- 26. 如何自动的登录链接点击管理页面重定向用户是否已经登录
- 27. 登录页面重定向不
- 28. 重定向到登录页面而不是Yii的索引页面
- 29. 如果用户未登录到JSF,重定向到登录页面
- 30. 登录页面将不能重定向到安全页面
似乎有很多重定向发生在这里。首先,控制器属性(授权)检查用户是否已登录,如果是,则传递给角色提供者以查看用户是否被授权或将用户传递回登录页面。如果登录页面检测到用户已经登录,那么它会重新将它们重定向到未经授权的页面,这看起来像是一个混乱。我想我会更喜欢在IAuthorizationFilter中处理这个问题,以避免重定向。它看起来更清洁,更易于阅读。 – BobTheBuilder 2009-11-14 15:51:14
“我认为我更喜欢在IAuthorizationFilter中处理这个问题” - 每个都是他自己的,但我认为重定向是更简单的解决方案。如前所述,您可以通过让登录页面呈现不同的登录用户来避免第二次重定向。 – Joe 2009-11-14 16:05:10