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的用户尝试访问登录页面时自动重定向到登录页面。
当我使用相同的代码进行小改动时它就不适合我工作**