【发布时间】:2013-06-25 07:10:06
【问题描述】:
我们有一个在 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))
但上述技术不起作用。因此,我的诊断存在缺陷。
请求帮助以解决此问题。如果您需要更多相关信息,请告诉我。
【问题讨论】:
标签: google-app-engine python-2.7 session-cookies facebook-login