1

我正在尝试关注Tutorial: Adding Facebook/Twitter/Google Authentication to a Django Application。我做的唯一不同的是我在Google App Engine开发服务器上运行DjangoAppEngine,否则一切都完全按照教程。Google App Engine上的python-social-auth失败

当我到步骤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可能是更好的方法,但我不明白为什么,我不确定我想要重新开始,如果我只是想念一些明显的东西。

有没有人知道为什么我得到这个错误,我能做些什么来纠正它?

回答

1

UPDATE:原应答(从“不过”)不再是必要的,只要使用requests 2.10.0或以上,urllib3 1.15.1或以上,和requests_toolbelt 0.6.2或以上,并执行以下在你的main():

from requests_toolbelt.adapters import appengine 
appengine.monkeypatch() 

无论其如果你正在使用旧版本的请求和/或urllib3的,那么你需要下面的补丁:

这可以通过使用一个补丁版本来完成requests以及requests-toolbelt包。适用主题:

我申请了这一切,现在有python-social-authfacebook-sdk在本地工作测试(dev服务器)和生产(完整的App Engine)。

+0

你应用了哪些补丁? – kzh

+0

我确认这是有效的。关键是最后一个链接:https://github.com/sigmavirus24/requests-toolbelt/pull/119 – kzh

+1

希望所有这些补丁很快就会汇入这些库的正式版本,并且不需要补丁:) – seawolf

1

发生这种情况是因为Facebook SDK依赖于真棒requests库。但是,requests不适用于Google App Engine,因为该平台有一些限制。您必须使用其urlfetch API在Google App Engine上获取外部内容。

所以是的,官方的Facebook SDK将无法正常工作。你必须推出你自己的解决方案或找到一个有效的解决方案。 SimpleAuth是众所周知的解决方案之一。

+0

好吧,这很糟糕......但总的来说,我对沙盒非常舒服,只是没有意识到发生了什么。好的,它是'SimpleAuth'。谢谢! – seawolf

+0

'requests'现在在App Engine下工作(有几个补丁)...我已经替换了包含指向相关文档的链接的答案。 – seawolf

0

在你的商品库中,确保你有request_toolbelt。 (pip install -t lib requests_toolbelt)。然后,在python-social-auth调用请求之前,“monkeypatch”appengine支持。在我的项目/ wsgi中。PY,我添加了以下几行:

from requests_toolbelt.adapters import appengine 
appengine.monkeypatch() 

蟒蛇 - 社会 - 权威性取决于requests,所以它也应该存在于您的供应商目录。

您还必须确保您使用的请求版本> = 2.10.0。这还没有发布,所以你可以伪造它。编辑lib/requests/__init__.py以便__build__ = 0x021000。您还必须将urllib3的打包版本的lib/requests/packages/目录升级到最新版本。

这是为我工作。

+0

我尝试了所有这一切,它不适合我,GAE SDK 1.9.36 – Bodhi

+0

适合我!与urllib3 1.15.1。 [详情如下。](http://stackoverflow.com/questions/34574740/python-social-auth-failure-on-google-app-engine/35944044#comment61501928_35109359) – ryan

+0

这不适合我用最新的GAE SDK也是。我回到2016年1月左右的版本(gcloud 94.0.0,GAE 1.9.31)开始工作 –

相关问题