gpt4 book ai didi

asp.net-mvc - 身份验证后重定向到请求的页面

转载 作者:行者123 更新时间:2023-12-02 08:54:59 25 4
gpt4 key购买 nike

我正在开发 mvc .net 应用程序,并且正在使用表单例份验证。我想在用户通过身份验证后将其重定向到他请求的页面。任何帮助将不胜感激。

最佳答案

如果您创建 ASP.NET MVC 3 或 4 Internet 应用程序项目,它将有一个完整的示例,说明如何在身份验证时使用返回 URL。

当您将 AuthorizeAttribute 添加到 Controller 以强制进行身份验证时,它会将用户重定向到您的 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 的工作原理,this StackOverflow 帖子显示使用原始请求设置 returnUrl。

您还需要确保验证 returnUrl 确实是本地 URL,否则您很容易受到开放重定向攻击。 RedirectToLocal() 是 MVC 4 Internet 应用程序模板中的一个辅助方法,用于执行此验证:

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

关于asp.net-mvc - 身份验证后重定向到请求的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com