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)開始工作 –

相關問題