C# MVC 4表单身份验证不使用[授权]

C# MVC 4表单身份验证不使用[授权],c#,asp.net-mvc,asp.net-mvc-4,forms-authentication,authorize,C#,Asp.net Mvc,Asp.net Mvc 4,Forms Authentication,Authorize,我现在正在学习MVC4,我正在按照专业ASP网络MVC4第四版的书创建一个体育商店项目 我一直使用webforms进行开发,我试图弄清楚表单身份验证在MVC4中是如何工作的 以下是我取得的成就: Web.Config 身份验证提供程序: 我正在设置AuthCookie,现在我想知道如何保护其他控制器 以及AccountController之外的操作 该应用程序有一个名为AdminController的控制器,您可以在其中编辑产品和 以下{controller/action}下的中的产品列表 管理

我现在正在学习MVC4,我正在按照专业ASP网络MVC4第四版的书创建一个体育商店项目

我一直使用webforms进行开发,我试图弄清楚表单身份验证在MVC4中是如何工作的

以下是我取得的成就:

Web.Config

身份验证提供程序:

我正在设置AuthCookie,现在我想知道如何保护其他控制器 以及AccountController之外的操作

该应用程序有一个名为AdminController的控制器,您可以在其中编辑产品和 以下{controller/action}下的中的产品列表

管理员/索引

因此,如果我没有误解这个理论,如果用户没有登录AccountController,他们就不能使用[Authority]标记调用操作 关于声明:

 public class AdminController : Controller
    {
        private IProductRepository repository;


        public AdminController(IProductRepository repo)
        {
            repository = repo;
        }

       [Authorize]
        public ActionResult Index()
        {

            return View(repository.Products);
        }
   }
问题是,我可以调用管理员控制器的索引操作,而不会出现任何问题,也不会引入登录

我需要一些指导来了解它是如何工作的。我做了一些研究,没有发现任何东西,这本书没有涉及这个主题

提前谢谢


编辑:我关闭了Chrome浏览器,没有做任何更改。我正在使用选项卡,我猜cookie处于活动状态,甚至停止和开始调试。

如果控制器操作用
[Authorize]
属性修饰(就像您的
管理/索引
操作一样),如果请求中没有有效的表单身份验证cookie,则无法调用此操作

同样,在您的
登录
操作中,成功验证后,您不应返回视图,但应重定向到别处,以便正确设置cookie并在后续请求中可用

以下是未经身份验证的用户尝试访问受保护的
Admin/Index
操作时应该发生的情况。
[Authorize]
属性将抛出一个401异常,正如您从经典WebForms中了解到的那样,表单身份验证模块将拦截该异常,并将您重定向到web.config中配置的
loginUrl
,并传递一个返回URL查询字符串参数,即最初请求的受保护资源

因此,您必须在帐户控制器上有一个
登录
操作,该操作没有使用
[HttpPost]
属性修饰,并且应该服务于包含登录视图的视图。请求将如下所示:

/Account/Login?ReturnUrl=%2Fadmin%2Findex

您使用的是哪个Visual Studio版本?2010年还是2012年?废话,我关闭了浏览器并清理了缓存,现在它可以正常工作,没有任何变化是的,也许你在上一次会议上留下了一些表单验证cookies。你是唯一一个帮助和解释得很好的人。所以我接受了这个答案。多谢各位much@DarinDimitrov-请您进一步详细说明:“同样在登录操作中,在成功验证后,您不应返回视图,但应重定向到别处,以便正确设置cookie…”?为什么返回视图而不重定向不设置身份验证cookie?
public bool Authenticate(string username, string password) {
            bool result = FormsAuthentication.Authenticate(username, password);
            if (result)
            {
                FormsAuthentication.SetAuthCookie(username, false);
            }

            return result;

        }
 public class AdminController : Controller
    {
        private IProductRepository repository;


        public AdminController(IProductRepository repo)
        {
            repository = repo;
        }

       [Authorize]
        public ActionResult Index()
        {

            return View(repository.Products);
        }
   }
/Account/Login?ReturnUrl=%2Fadmin%2Findex