我們有一個在Google Appengine(Python 2.7)上運行的應用程序,它使用Simple Auth作爲登錄和webapps2框架。 我們目前只支持Facebook登錄。在Google appengine(Python)中創建會話 - 簡單驗證失敗
問題:有時facebook登錄會話創建不能正常工作。 這並不總是發生,它隻影響網站整體流量的10%。 從Facebook身份驗證到我們網站的回調正常,我們也能夠獲得Facebook身份驗證令牌。但會話創建單獨失敗。
控制流: 1)中的「使用Facebook登入」按鈕用戶點擊我們頁面 2)用戶被重定向至Facebook爲權限(如果它的第一次登錄) 3)用戶被重定向回上我們的網站在Facebook上給予適當的授權 4)用戶認證令牌在我們的網站上獲得,我們使用此令牌從Facebook圖形API獲取用戶詳細信息 5)創建會話並在響應對象上設置cookie頭(Place當前問題發生在哪裏) 6)用戶被重定向到我們的儀表板(儀表板是一個只顯示登錄用戶的屏幕,所以如果會話/ cookie沒有正確創建,用戶將會我將被重定向回登錄頁面)。
補救措施已經嘗試: 我的第一個猜測是創建會話比下一行代碼執行所需的時間更多。如果會話創建是異步過程,則會發生這種情況。所以我在會話創建線和下一行之間加入了一個小的延遲。這個想法是給予足夠的時間來承諾未承諾的變更。此外,如果會話在休眠時間結束時並未真正創建,我嘗試重新創建會話對象。
ok, user = self.auth.store.user_model.create_user(auth_id, **_attrs)
logging.info("creating user : "+str(ok)+" | user" +str(user))
if ok:
self.auth.set_session(self.auth.store.user_to_dict(user))
logging.info("User: "+str(self.auth.get_user_by_session()))
if(self.auth.get_user_by_session() is None):
logging.info("Existing user logging in.. But the set session didn't work So wait for sometime")
time.sleep(0.5)
if(self.auth.get_user_by_session() is None):
logging.info("Existing user logging in.. But the set session didn't work So try again")
self.auth.set_session(self.auth.store.user_to_dict(user))
但上述技術不起作用。所以,我的診斷有一個缺陷。
請求幫助解決此問題。如果您需要更多相關信息,請告訴我。