2012-08-10 37 views
9

我正在使用Facebook C#SDK,并通过他们的Facebook帐户对用户进行身份验证。一旦我执行了所有检查以“认证”它们,我打电话FormsAuthentication.SetAuthCookie(email, false);什么在ASP.NET MVC应用程序中设置User.Identity.IsAuthenticated?

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

我有一些操作会根据身份验证状态返回不同的视图,并且希望确保User.Identity.IsAuthenticated在MVC 4应用程序中可靠。

回答

15

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

因此,要回答你的问题:

是否执行这一呼吁让我有机会获得 我的行动中User.Identity.IsAuthenticated?如果我 没有打这个电话呢?

不完全是。此调用仅将响应的表单身份验证Cookie发出。它是负责拦截请求的HTTP模块,如果此请求包含cookie,它将设置User.Identity

+0

谢谢你,很好的答案。假设访问者是该网站的全新,没有身份验证cookie。 'User.Identity.IsAuthenticated'会为false还是null?然后,只要FormsAuth HTTP模块可以读取/验证FormsAuth cookie,“User.Identity.IsAuthenticated”将是真实的? – Chaddeus 2012-08-10 06:25:31

+5

User.Identity永远不为空。但User.Identity.IsAuthenticated将是错误的。 – 2012-08-10 06:31:41

+0

完美,谢谢!你不仅回答了我的问题,而且现在我更全面地理解了formauth,非常感谢。 – Chaddeus 2012-08-10 06:32:38

相关问题