的AccountController
这是我的帐户控制器,我有一个用户模型,我将从那里获取电子邮件和密码。
public ActionResult Login(User model, string ReturnUrl)
{
using(DbAccess db=new DbAccess())
{
var user=db.users.Where(m => m.email == model.email && m.password == model.password).FirstOrDefault();
FormsAuthentication.SetAuthCookie(user.username,user.RemmemberMe);
if (string.IsNullOrEmpty(ReturnUrl))
{
return RedirectToAction("Index", "Home");
}
else
{
return Redirect(ReturnUrl);
}
}
}
的HomeController
在这里你可以看到这是Home Controller,我在整个控制器上使用allow anonymous属性但是About Action Method有Authorize属性......
[AllowAnonymous]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
WebConfig
这是我的web.config文件......
<authentication mode="Forms">
<forms loginUrl="~/Account/Login"></forms>
</authentication>
现在的问题是,当我登录时,我可以访问所有操作方法,无论是匿名还是授权,我的预期,但当我退出并重定向到登录页面时,我再次尝试访问授权操作方法比是的,它将我重定向到该方法,我的意思是它被未经授权的用户访问。
此外,我已经使用cookies等清除了浏览器的完整历史记录,但它不适用于我
答案 0 :(得分:1)
正如Rick Anderson在MSDN Blog所述,请阅读更多详情。
在MVC中,默认情况下所有控制器+操作都可以访问 用户,经过身份验证和访客。要保护控制器或操作, 已提供Authorize属性。
你需要做相反的事情。保护所有应用程序控制器以及操作方法和AllowAnonymos
这些控制器操作,任何登录用户或匿名用户都可以访问这些操作。
您修改后的代码应该如下所示。
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}