【问题标题】:Facebook Connect & ASP.NET Forms Authentication - Timing/Cookie ProblemFacebook Connect 和 ASP.NET 表单身份验证 - 时间/Cookie 问题
【发布时间】:2010-07-14 23:48:03
【问题描述】:

这是我所拥有的

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

这是我正在尝试做的事情

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

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

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

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

一切正常。

但是,在我进行单点登录后(字面意思是下一行),我需要呈现匿名内容(请登录)或经过身份验证的用户内容(显示名称等)。问题是,用户还没有真正“通过身份验证”到我的网站。要对我的网站进行“身份验证”,我会做一些标准的事情(检查HttpContext.User.Identity.IsAuthenticated 属性)。

我认为它尚未设置为 "true",因为已创建 Forms Auth cookie,但在响应中,HttpContext.User.Identity.IsAuthenticated 是基于此时的请求 - 我在吗?

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

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

所以这几乎是一个时间问题。我怎样才能自动登录用户(通过FormsAuthentication.SetAuthCookie)确保HttpContext.User.Identity.IsAuthenticated 是真实的?

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

或者我是否需要对自己做一个Response.Redirect 才能刷新 HTTP 请求中的 cookie?

众所周知,Facebook Connect 的文档是分散且极少的,因此只需将所有内容拼凑在一起即可。

任何帮助将不胜感激...干杯!

【问题讨论】:

    标签: asp.net cookies facebook forms-authentication


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      相关资源
      最近更新 更多