在ASP.NET MVC应用程序中,什么设置了User.Identity.IsAuthenticated?

10
我正在使用Facebook C# SDK,并通过用户的Facebook账户对其进行身份验证。在执行所有“身份验证”检查后,我调用FormsAuthentication.SetAuthCookie(email, false);
执行该调用是否允许我在我的操作中访问User.Identity.IsAuthenticated?如果我没有进行该调用呢?
我有一些操作将根据其身份验证状态返回不同的视图,并希望确保User.Identity.IsAuthenticated在MVC 4应用程序中可靠。
1个回答

16

这是由 FormsAuthentication HTTP 模块注册并在每个请求上执行。当您在web.config的<authentication>标记中指定mode="Forms"时,此模块会自动注册。它拦截所有401响应,并自动将用户重定向到LogOn页面(有时这不是期望的行为,因为最终结果是HTTP状态代码200)。

所以回答你的问题:

执行该调用是否允许我在我的操作中访问User.Identity.IsAuthenticated?如果我没有进行该调用呢?

不完全是。此调用仅向响应发出forms身份验证cookie。如果此请求包含cookie,则HTTP模块负责拦截请求,并设置User.Identity


谢谢,非常好的答案。假设访问者是全新的网站用户,没有授权cookie。User.Identity.IsAuthenticated会是false还是null?然后,只要FormsAuth HTTP模块能够读取/验证FormsAuth cookie, User.Identity.IsAuthenticated 将为true? - Chaddeus
5
User.Identity永远不会为null。但User.Identity.IsAuthenticated将为false。 - Darin Dimitrov
非常好,谢谢!你不仅回答了我的问题,而且我现在更加了解formsauth,真的很感激。 - Chaddeus
感谢清晰的回答,请问能否提及一篇涵盖整个 MVC 生命周期的文章。我查阅了MVC生命周期的资料,但它并不是很详细。我想要澄清每个模块、整个应用程序以及请求生命周期的概念。 - user2156081
@Darin 在表单身份验证中,点击登录按钮并成功从数据库进行身份验证后,会发生什么来设置用户身份?是任何模块/处理程序等吗?如果不使用默认成员身份,则应该怎么做才能设置身份?设置authcookie是否负责此操作? - user2156081

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接