python-Google App Engine 上的社交身份验证失败
python-social-auth failure on Google App Engine
我正在尝试关注 Tutorial: Adding Facebook/Twitter/Google Authentication to a Django Application。我唯一不同的是,我是 Google App Engine 开发服务器上的 运行 DjangoAppEngine,否则一切都完全按照教程进行。
当我进入第 4 步并实际尝试使用 Facebook 进行身份验证时,出现运行时错误:
error('illegal IP address string passed to inet_pton',)
Request Method: GET
Request URL: http://localtest.com:8080/o/complete/facebook/?redirect_state=FG4K...UG1k
Django Version: 1.6.11
Exception Type: RuntimeError
Exception Location: /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py in _MakeRealSyncCall, line 235
Python Executable: /usr/local/opt/python/bin/python2.7
Python Version: 2.7.11
显然,FB 正在将批准传回我的应用程序,因为请求 URL 包含回调路径。
似乎 GoogleAppEngineLauncher 中的某些内容正在尝试查找地址,但没有收到正确的数据?我不太确定。
在尝试解决此问题时,我在某处看到一条评论,向用户建议 SimpleAuth 可能是更好的方法,但我不明白为什么,我也不是如果我只是遗漏了一些明显的东西,我真的很确定我想重新开始。
有谁知道我为什么会收到这个错误以及我可以做些什么来纠正它?
这是因为 Facebook SDK 依赖于很棒的 requests
库。但是,requests
不适用于 Google App Engine,因为该平台有一些限制。您必须使用他们的 urlfetch
API 在 Google App Engine 上获取外部内容。
是的,官方 Facebook SDK 将无法运行。您必须推出自己的解决方案或找到一个有效的解决方案。 SimpleAuth
是已知有效的解决方案之一。
更新:原来的答案(以'HOWEVER'开头)不再需要,只需使用requests
2.10.0或更高版本,urllib3
1.15.1 或更高版本,以及 requests_toolbelt
0.6.2 或更高版本,并在您的 main() 中执行以下操作:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
但是 如果您使用的是旧版本的请求 and/or urllib3,那么您需要以下补丁:
这可以使用 requests
的补丁版本和 requests-toolbelt
包来完成。适用的主题:
- HTTPS not working on Google App Engine #1905
- urllib3 / Contrib Modules / Google App Engine
- Fixes the AppEngineManager to work within the requests framework #763
- Add AppEngineAdapter for GAE users #114
- Adds a monkeypatch() function that ensures all Sessions use the AppEngineAdapter compatibility class. #119
我已经应用了所有这些,现在 python-social-auth
和 facebook-sdk
在本地测试(开发服务器)和生产(完整的 App Engine)中工作。
在您销售的库中,确保您有 requests_toolbelt。 (pip install -t lib requests_toolbelt
)。然后 "monkeypatch" appengine 支持在 python-social-auth 调用请求之前。在我的 project/wsgi.py 中,我添加了以下行:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
python-social-auth 依赖于 requests
,因此它也应该存在于您的 vendor 目录中。
您还必须确保您使用的请求版本 >= 2.10.0。这还没有发布,所以你可以伪造它。编辑 lib/requests/__init__.py
以便 __build__ = 0x021000
。您还必须将 lib/requests/packages/
目录中 urllib3
的打包版本升级到最新版本。
这对我有用。
我正在尝试关注 Tutorial: Adding Facebook/Twitter/Google Authentication to a Django Application。我唯一不同的是,我是 Google App Engine 开发服务器上的 运行 DjangoAppEngine,否则一切都完全按照教程进行。
当我进入第 4 步并实际尝试使用 Facebook 进行身份验证时,出现运行时错误:
error('illegal IP address string passed to inet_pton',)
Request Method: GET
Request URL: http://localtest.com:8080/o/complete/facebook/?redirect_state=FG4K...UG1k
Django Version: 1.6.11
Exception Type: RuntimeError
Exception Location: /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py in _MakeRealSyncCall, line 235
Python Executable: /usr/local/opt/python/bin/python2.7
Python Version: 2.7.11
显然,FB 正在将批准传回我的应用程序,因为请求 URL 包含回调路径。
似乎 GoogleAppEngineLauncher 中的某些内容正在尝试查找地址,但没有收到正确的数据?我不太确定。
在尝试解决此问题时,我在某处看到一条评论,向用户建议 SimpleAuth 可能是更好的方法,但我不明白为什么,我也不是如果我只是遗漏了一些明显的东西,我真的很确定我想重新开始。
有谁知道我为什么会收到这个错误以及我可以做些什么来纠正它?
这是因为 Facebook SDK 依赖于很棒的 requests
库。但是,requests
不适用于 Google App Engine,因为该平台有一些限制。您必须使用他们的 urlfetch
API 在 Google App Engine 上获取外部内容。
是的,官方 Facebook SDK 将无法运行。您必须推出自己的解决方案或找到一个有效的解决方案。 SimpleAuth
是已知有效的解决方案之一。
更新:原来的答案(以'HOWEVER'开头)不再需要,只需使用requests
2.10.0或更高版本,urllib3
1.15.1 或更高版本,以及 requests_toolbelt
0.6.2 或更高版本,并在您的 main() 中执行以下操作:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
但是 如果您使用的是旧版本的请求 and/or urllib3,那么您需要以下补丁:
这可以使用 requests
的补丁版本和 requests-toolbelt
包来完成。适用的主题:
- HTTPS not working on Google App Engine #1905
- urllib3 / Contrib Modules / Google App Engine
- Fixes the AppEngineManager to work within the requests framework #763
- Add AppEngineAdapter for GAE users #114
- Adds a monkeypatch() function that ensures all Sessions use the AppEngineAdapter compatibility class. #119
我已经应用了所有这些,现在 python-social-auth
和 facebook-sdk
在本地测试(开发服务器)和生产(完整的 App Engine)中工作。
在您销售的库中,确保您有 requests_toolbelt。 (pip install -t lib requests_toolbelt
)。然后 "monkeypatch" appengine 支持在 python-social-auth 调用请求之前。在我的 project/wsgi.py 中,我添加了以下行:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
python-social-auth 依赖于 requests
,因此它也应该存在于您的 vendor 目录中。
您还必须确保您使用的请求版本 >= 2.10.0。这还没有发布,所以你可以伪造它。编辑 lib/requests/__init__.py
以便 __build__ = 0x021000
。您还必须将 lib/requests/packages/
目录中 urllib3
的打包版本升级到最新版本。
这对我有用。