繁体   English   中英

ASP.Net MVC-有条件的未经授权的重定向

[英]ASP.Net MVC - Conditional Unauthorized Redirects

我的MVC3应用提供了三种用户登录方式

  1. 电子邮件+别名
  2. OpenID提供者
  3. 用户名+密码

前两个是针对没有帐户的访问者的,允许他们对事物进行评论/投票; 最后是针对拥有具有提升特权的数据库用户帐户的作者和管理员。 因此,有两种登录表单-一种用于访客,一种用于正式用户。

未经身份验证/未经授权的访问资源的尝试将作为标准重定向到登录页面。

题:

  1. 我如何有条件地将这些请求重定向到适当的位置? 需要对完整用户登录表单具有“作者/管理员”特权的资源,以及仅对访问者登录表单具有访问者特权的资源?

  2. 另外,在AJAX或部分视图调用的情况下,我可以避免避免重定向吗? 例如,我想将评论的部分视图嵌入到我的入口视图中,如果未通过身份验证,则不进行重定向,而只是将访问者的登录嵌入在那里。

更新:我不想保留2个Atuhorize属性。

1-您可以从[AuthorizeAttribute]继承,并自定义实现以路由到所需的未经授权的页面。

看到选定的遮阳篷是这个问题: 在ASP.NET MVC中重定向未授权的控制器

2-如果您正在从ajax调用中加载部分内容(即$.Get(url)$("#somediv").Load(url) ),请确保url调用的操作已正确使用自定义修饰[AuthorizeAttribute]

否则,您将需要在剃刀视图中使用一些逻辑来检查用户是否已通过身份验证。 遵循以下原则

  @if (User.Identity.IsAuthenticated)
  {
      // Normal case
  }
  else
  {
      @Html.Partial("Login")
  }

您的“登录”部分将在其中显示所需的登录视图。

更新

您可以实现2个不同的属性,每种情况一个。

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsUserAdminAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to admin logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsAuthenticatedAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to basic/comment logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public abstract class CustomAuthorizedBaseAttribute : AuthorizeAttirbute
{
    // Shared custom logic implementation
    ...
}

根据情况,您可以使用一个或另一个来装饰控制器动作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM