Facebook Connect& ASP.NET Forms身份验证 - 计时/ Cookie问题

时间:2010-07-14 23:48:03

标签: asp.net cookies facebook forms-authentication

这是我拥有的

  
      
  • ASP.NET 4.0 Web应用程序
  •   
  • 表单身份验证(基于Cookie)
  •   

这是我正在尝试做的事情

  
      
  • 与Facebook Connect集成(使用JavaScript& Graph API)
  •   
  • 为我的用户提供单点登录服务(自动登录   用户如果他们已登录并已连接   到Facebook)
  •   

在每个页面上都有一个显示匿名/登录用户详细信息的控件。

以下是问题: 在此用户控件的Page_PreRender上(在每个页面上,因此请考虑在每个页面请求上执行此事件),我尝试基于Facebook身份验证状态(JavaScript API - Cookies)自动登录。

如果登录成功,我使用FormsAuthentication.SetAuthCookie登录。

这一切都正常。

然而,在我单点登录后(字面意思是下一行),我需要渲染出匿名的东西(请登录)或经过身份验证的用户资料(显示名称等)。问题是,用户还没有真正“验证”我的网站。要对我的网站进行“身份验证”,我会做标准的事情(检查HttpContext.User.Identity.IsAuthenticated属性)。

我认为它还没有设置为"true,因为已经创建了Forms Auth cookie,但是在响应中,HttpContext.User.Identity.IsAuthenticated基于此时的请求 - 我是就在那儿?

当然,即使用户已登录,它也会显示匿名详细信息。

当我刷新页面时,会显示正确的用户详细信息。

所以它几乎是一个时间问题。如何自动登录用户(通过FormsAuthentication.SetAuthCookie)确保HttpContext.User.Identity.IsAuthenticated为真?

也许我在错误的地方进行身份验证/单点登录?

或者,为了刷新HTTP请求中的cookie,我是否需要几乎自己Response.Redirect

众所周知,Facebook Connect的doco分散而且极小,所以所有这些都是将事情拼凑在一起的。

任何帮助都会受到赞赏......干杯!

1 个答案:

答案 0 :(得分:3)

好的,我找到了答案(这是我希望的答案,而不是答案)。

正如我预测的那样,FormsAuthentication.SetAuthCookie在HTTP响应流中创建了一个身份验证cookie。但HttpContext.User.Identity.IsAuthenticated读取HTTP请求流(没有cookie)。

因此解决方案是使用Response.Redirect(this.Context.Request.RawUrl, true)以编程方式刷新页面(第二个参数终止当前页面执行)以重新加载HTTP请求中的cookie。

这就是为什么我猜我们总是有一个Login.aspx页面设置表单cookie然后重定向到某个地方,因为当重定向到“某处”时,会发出另一个请求以便刷新cookie。 / p>

我可能会将Facebook授权内容放在一个独立的.aspx页面中,并且与常规表单身份验证相同。

哦,微软人here提到了“刷新”的想法。