AJAX是一个可接受的解决方案吗?这样,您就可以始终保持在同一页上,不需要重定向。另一种选择是将错误消息存储在
TempData
public ActionResult Login(string email, string password, string returnUrl)
{
if (userService.AuthenticateUser(email, password))
{
FormsAuthentication.SetAuthCookie(email, true);
if (!string.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Default");
}
if (!string.IsNullOrEmpty(returnUrl))
{
TempData["message"] = "login failed";
return Redirect(returnUrl);
}
ModelState.AddModelError("login_fail", "login failed");
return View();
}
出于安全原因,还必须验证
returnUrl
在重定向之前属于您的域,或者黑客可以创建链接和
返回URL
指向某个与你的完全相同的欺骗网站,欺骗用户再次输入用户名和密码。默认值ASP.NET visualstudio中的MVC模板也存在同样的漏洞。