为ASP.NET MVC身份验证添加额外步骤

时间:2015-03-17 08:40:33

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

我有一个使用标准表单身份验证运行的MVC 5网站。

但是我需要在用户的登录过程中添加额外的步骤。用户通过身份验证后,我们会查看他们是否可以访问多个办事处。如果他们这样做,我们需要向他们展示办事处清单,他们必须选择一个。

这是必须执行的步骤,在执行此操作之前不能将其视为已登录。

我们是否需要创建自己的身份验证,还是应该向BaseController添加检查?

1 个答案:

答案 0 :(得分:2)

您可以扩展内置身份验证的实现:

public class OfficeSelectionAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var result = base.AuthorizeCore(httpContext);

        if (result)
        {
            if (IsOfficeSelected())
            {
                return true;
            }

            httpContext.Response.RedirectToRoute("OfficeSelection Route");
            httpContext.Response.Flush();
        }

        return false;
    }

    private bool IsOfficeSelected()
    {
        //office selection check
    }
}

然后您需要使用此过滤器而不是默认过滤器:

[OfficeSelectionAuthorize]
public class AccountController : Controller
{
    //action methods
}