FormsAuthentication.SetAuthCookie在MVC 5中没有

我创建了一个全新的ASP.NET MVC 5项目,用FormsAuthentication.SetAuthCookie测试[Authorize]属性。 我只是在一个动作中设置一个cookie(在我的Home控制器中):

  public ActionResult About() { FormsAuthentication.SetAuthCookie("someUser", false); 

我限制访问另一个:

  [Authorize] public ActionResult Contact() { 

当我启动我的网页并导航到/home/contact ,我被正确地重定向到登录页面。 然后我转到/home/about ,获取我的cookie,然后返回联系页面。 但是我仍然被重定向到登录页面 – cookie没有validation/授权我。

在调试器中,当我多次加载About页面时, HttpContext.User.Identity.IsAuthenticated == false (也就是说,即使在设置了auth cookie之后,它也从未将我视为已经过身份validation)。

这里必须要做一些额外的步骤吗? 我不应该为基本身份validation设置自己的IPrincipal,我应该吗?

从web.config中删除:

    

或简单删除web.config中的行

编辑:我不知道MVC5默认删除了表单身份validation的新项目(该模块已被删除)所以请确保您还检查DSR在您的原始post下的评论与所有这些。

检查你的web.config并查找身份validation部分,它应该是这样的,

    

http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.85%29.aspx

默认的cookieless值是“UseDeviceProfile”,这意味着如果浏览器报告它支持cookie,则使用cookie,否则不使用cookie,它使用查询字符串中的值来维护经过身份validation的状态(需要在回发时保留)。

其次,确保您的浏览器中已启用cookie。 如果设备/浏览器不支持cookie或它们已关闭,则SetAuthCookie将对URL进行更改,但您必须在使用…调用SetAuthCookie后重定向浏览器…

 FormsAuthentication.RedirectFromLoginPage(String, Boolean)... 

在使用SetAuthCookie进行身份validation后,该方法将页面重定向到其目标。 RedirectFromLoginPage将在url查询中放置所需的属性,以维护回发时的登录会话。 如果您在此处和网站上进行自己的重定向,则需要通过检查当前用户是否使用HttpContext.Current.User.Identity.IsAuthenticated进行身份validation来维护该url查询参数。

为了将您的用户发送到您应该使用的登录页面

 FormsAuthentication.RedirectToLoginPage() 

该方法将returnUrl参数添加到查询字符串,后面的函数“RedirectFromLoginPage”将在经过身份validation后重定向回。

如果阻止对web.config中具有位置元素的用户或角色访问路径和资源,则表示身份validation会在未经过身份validation的用户尝试访问登录页面时自动重定向到登录页面。

          
         

当我使用相同的代码进行小改动时它就不适合我工作** **