[英]Facebook Connect & ASP.NET Forms Authentication - Timing/Cookie Problem
这就是我所拥有的 :
- 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
为真?
也许我在错误的地方进行身份验证/单点登录?
或者我需要几乎做一个Response.Redirect
给自己,以刷新HTTP请求中的cookie?
众所周知,Facebook Connect的doco分散且极小,所以所有这些都是将事情拼凑在一起的问题。
任何帮助将不胜感激...欢呼!
好的,我找到了答案(这是我希望的答案,而不是答案)。
正如我预测的那样, FormsAuthentication.SetAuthCookie
在HTTP Response Stream中创建了一个身份验证cookie。 但是HttpContext.User.Identity.IsAuthenticated
读取HTTP请求流(没有cookie)。
所以解决方案是使用Response.Redirect(this.Context.Request.RawUrl, true)
以编程方式刷新页面(第二个参数终止当前页面执行)以重新加载HTTP请求中的cookie。
这就是为什么我猜我们总是有一个Login.aspx
页面设置表单cookie,然后重定向到某个地方,因为当重定向到“某处”时,会发出另一个请求,以便刷新cookie。
我可能会将Facebook授权内容放在一个独立的.aspx页面中,并且与常规表单身份验证相同。
哦,微软人员在这里提到了“刷新”的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.