为了仅授权登录用户访问我使用过的特定页面:
[Authorize(Roles="administrator")]
[Authorize(Roles="subscriber")]
管理员和订阅者是我网站上的唯一角色。现在,当未登录的用户尝试访问未经授权的女巫的页面时,这将起作用,他会自动被重定向到登录页面。用户登录后出现问题;我想将他重定向到他之前尝试访问的页面。
我怎样才能做到这一点?
为了仅授权登录用户访问我使用过的特定页面:
[Authorize(Roles="administrator")]
[Authorize(Roles="subscriber")]
管理员和订阅者是我网站上的唯一角色。现在,当未登录的用户尝试访问未经授权的女巫的页面时,这将起作用,他会自动被重定向到登录页面。用户登录后出现问题;我想将他重定向到他之前尝试访问的页面。
我怎样才能做到这一点?
当表单身份验证模块将ReturnUrl
用户重定向到登录页面时,它会在查询字符串中传递一个。当显示此登录表单时,请查看您的浏览器地址栏。
因此,一旦您成功登录,您就可以重定向到此 url。
在您创建 MVC 应用程序时为您创建的默认 AccountController 甚至有一个示例:
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
请注意 LogOn 操作如何使用 ReturnUrl 参数,如果身份验证成功,我们会将用户重定向到他最初请求的页面。
但显然,这只有在目标 url 可以通过 GET 请求访问时才有效。
if (Request.QueryString["returnurl"] != null) return Redirect(Request.QueryString["returnurl"]);