【问题标题】:Session creation in Google appengine (Python) - simple auth failingGoogle appengine (Python) 中的会话创建 - 简单的身份验证失败
【发布时间】: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


    【解决方案1】:

    一般来说,等待是同步的糟糕借口。

    在任何一种情况下,您都需要深入了解您的身份验证库进行调查。 您不希望 auth.set_session 是异步的。使其同步。这应该会让生活更轻松。

    了解 get_user_by_session() 的工作原理。您描述的问题听起来很像最终的一致性行为。如果 get_user_by_session() 发出数据存储查询操作,则可能会发生这种情况,这可能会返回最终一致的结果。对于您的 get_user_by_session() 操作,您需要高度一致的结果,因此库应该使用数据存储获取操作。事实上,由于您刚刚创建了用户和会话,因此库应该已经缓存了该信息,根本不需要访问数据存储区。

    这个库是python,你应该能够单步调试库代码并弄清楚发生了什么。

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 2020-01-26
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      相关资源
      最近更新 更多