当用户输入正确的用户名和密码时,他/她将看到MyNewPage.aspx
页面。这部分工作正常。但是,当我在浏览器窗口中直接键入http://localhost:49296/Pages/MyNewPage
而未登录时,我仍然可以访问此页面。我想要做的是限制用户无需登录即可访问此页面。
我该怎么做?
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("MyNewPage", "Pages");
}
}
}
return View(model);
}
答案 0 :(得分:8)
把
[Authorize]
控制器/动作上的
答案 1 :(得分:1)
确保用户已登录以获取对视图的访问权限
完成此操作的最简单方法是使用控制器操作方法上方的Authorize属性。例如,我们只希望允许用户在已经登录到站点时更改密码。为了防止未经授权的用户访问更改密码视图,我们可以限制访问,如下所示:
[Authorize]
public ActionResult ChangePassword()
{
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View();
}
您也可以通过检查User对象手动完成此操作,如下所示:
public ActionResult ChangePassword()
{
if (!User.Identity.IsAuthenticated)
return RedirectToAction("LogOn", "Account");
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View();
}
确保用户担任特定角色以获取对视图的访问权限
您可能有一些只应该可以访问特定角色的用户的视图。这也可以使用Authorize属性完成,如下所示:
[Authorize(Roles = "Administrator")]
public ActionResult Index()
{
return View();
}
您也可以使用以下方法在代码中完成此操作:
public ActionResult Index()
{
if (!User.IsInRole("Administrator"))
return RedirectToAction("LogOn", "Account");
return View();
}