我们有一个在 Google Appengine (Python 2.7) 上运行的应用程序,它使用Simple Auth登录和 webapps2 框架。我们目前只支持 Facebook 登录。
问题:有时 facebook 登录 - 会话创建无法正常工作。这并不总是发生,它只影响网站总流量的 10%。从 Facebook auth 到我们网站的回调正常,我们也能够获得 Facebook auth 令牌。但是单独创建会话失败。
控制流程: 1) 用户点击我们页面上的“使用 Facebook 登录”按钮 2) 用户被重定向到 Facebook 以获得权限(如果是第一次登录) 3) 用户在 Facebook 中给予适当授权后被重定向回我们的网站 4 )在我们的网站上获得用户身份验证令牌,我们使用此令牌从 Facebook 图形 API 获取用户详细信息 5)创建会话并在响应对象上设置 cookie 标头(当前发生问题的地方) 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))
但上述技术不起作用。因此,我的诊断存在缺陷。
请求帮助解决这个问题。如果您需要更多信息,请告诉我。