gpt4 book ai didi

google-app-engine - tipfy 1.0b 的 facebook 身份验证问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:56 24 4
gpt4 key购买 nike

我正在尝试模仿示例中的登录页面 http://tipfy-auth.appspot.com (来源 http://code.google.com/p/tipfy/source/browse/examples/auth/app/)没有成功。当用户被重定向回页面时,我似乎遇到了问题。当前的请求流程如下所示:

LoginPage (LoginHandler) -> Facebook 重定向 (FacebookAuthHandler) 302 -> Facebook.com -> Facebook 重定向 (FacebookAuthHandler) 302 -> SignupPage (SignupHandler) 302 -> LoginPage(LoginHandler).

这里的问题(据我所知)是从注册(应该是端点)到登录页面的最后一个 302(http 重定向)。

经过一些密集的日志记录(无法找到本地测试)后,似乎在从 facebook 返回时设置了一个 session 。 session 作为字典存储在请求处理程序 (FacebookAuthHandler) 的两个位置 self.auth.session(a dict) 和 self.session(a SecureCookieSession) 但在重定向到 SignupPage 之后 self.auth.session 为 None。

从 SignUpPage 到 LoginPage 的重定向是由于 SignupHandler 的 get 方法有一个装饰器 @login_required 来查看 self.auth.session 以确定是否应在此处处理请求或将其重定向。

那么为什么 self.auth.session 不在请求之间保留而 self.session 保留呢?是否在每次请求时都设置了 self.auth.session? session 是如何存储的?如果它在数据库中,数据存储类型是否重要(主/从或高复制)。

我正在研究源代码,但找不到任何有用的东西。

..弗雷德里克

编辑

在下面发布答案。

最佳答案

我已将问题缩小到问题出在 SessionAuthStore 类的 session 属性中。

当访问 session 属性时(这是属性@login_required 查看以确定是否重定向用户)它运行此代码(在 tipfy.auth.SessionAuthStore 中):

if not self.loaded:
self._load_session_and_user()

return self._session

这里的问题是,在 _load_session_and_user 方法中,期望能够根据 session 中的“ token ”键从数据存储中加载用户。

很遗憾,从 Facebook 返回时没有用户。因此它将失败并将用户重定向到登录页面。

为了继续我的项目,我稍微更改了代码,@login_required (tipfy.auth.init.py)

if not auth.session:
auth._load_session() # If no session try to load it from the _session_base

if not auth.session:
return handler.redirect(auth.login_url())

还有 MultiAuthStore 类的新方法。

def _load_session(self):
self.loaded = True
session = self._session_base.get('_auth', {})
if session:
self._session = session

可能不是最好的解决方案,但它有效。

关于google-app-engine - tipfy 1.0b 的 facebook 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com