[英]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.