为什么我的授权操作方法在MVC 5中是匿名的

时间:2016-06-25 02:15:04

标签: asp.net-mvc-5 forms-authentication

的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等清除了浏览器的完整历史记录,但它不适用于我

1 个答案:

答案 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();
    }
}