11 authentication asp.net-mvc forms-authentication asp.net-mvc-3
我正在使用mvc .net应用程序,我正在使用表单身份验证.我希望在用户进行身份验证后将用户重定向到他请求的页面.任何帮助,将不胜感激.
mfa*_*nto 31
如果您创建一个ASP.NET MVC 3或4 Internet应用程序项目,它将有一个完整的示例,说明如何在进行身份验证时使用返回URL.
将AuthorizeAttribute添加到控制器以强制进行身份验证时,它会将用户重定向到Login方法,并自动附加returnUrl参数.从那里,您需要在显示登录表单时跟踪它:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
然后将其添加到登录表单的路径集合中:
@*//ReSharper disable RedundantAnonymousTypePropertyName*@
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@*//ReSharper restore RedundantAnonymousTypePropertyName*@
}
Run Code Online (Sandbox Code Playgroud)
一旦用户提交登录,假设他们正确认证,您只需重定向到returnUrl:
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}
Run Code Online (Sandbox Code Playgroud)
最难的部分是通过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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16116 次 |
| 最近记录: |