Asp.net-Mvc

身份驗證後重定向到請求的頁面

  • March 14, 2017

我正在開發一個 mvc .net 應用程序,並且正在使用表單身份驗證。我想在使用者通過身份驗證後將使用者重定向到他請求的頁面。任何幫助,將不勝感激。

如果您創建一個 ASP.NET MVC 3 或 4 Internet 應用程序項目,它將有一個完整的範例說明如何在身份驗證時使用返回 url。

當您將 AuthorizeAttribute 添加到控制器以強制身份驗證時,它會將使用者重定向到您的 Login 方法,並自動附加 returnUrl 參數。從那裡,您需要在顯示登錄表單時對其進行跟踪:

public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

然後將其添加到您的登錄表單的路由集合中:

@*//ReSharper disable RedundantAnonymousTypePropertyName*@
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@*//ReSharper restore RedundantAnonymousTypePropertyName*@

}

一旦使用者送出登錄,假設他們正確驗證,您只需重定向到 returnUrl:

[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
    return RedirectToLocal(returnUrl);
}

最困難的部分是通過 GET/POST 序列跟踪 ReturnUrl。

如果您想了解 AuthorizeAttribute 是如何工作的,這篇 StackOverflow文章顯示了使用原始請求設置 returnUrl。

您還需要確保您驗證 returnUrl 確實是一個本地 url,否則您將容易受到開放重定向攻擊。RedirectToLocal() 是 MVC 4 Internet Application 模板中的一個輔助方法,它執行此驗證:

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
         return Redirect(returnUrl);
    }
    else
    {
         return RedirectToAction("Index", "Home");
    }
}

引用自:https://stackoverflow.com/questions/13146032