1

J'essaie de suivre Tutorial: Adding Facebook/Twitter/Google Authentication to a Django Application. La seule chose que je fais différemment est que je cours DjangoAppEngine sur le serveur de développement de Google App Engine, sinon tout est exactement comme dans le tutoriel.Échec de python-social-auth sur Google App Engine

Quand je reçois à l'étape 4 et réellement essayer d'authentifier avec Facebook, je reçois une erreur d'exécution:

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 

Il est évident que FB passe un agrément à mon application, l'URL de demande comprend le rappel chemin.

Il semble que quelque chose dans GoogleAppEngineLauncher essaie de rechercher une adresse et ne reçoit pas les bonnes données? Je ne suis pas vraiment sûr. En essayant de résoudre ce problème, je suis tombé sur un seul commentaire quelque part suggérant à un utilisateur que SimpleAuth pourrait être une meilleure façon de procéder, mais je ne comprends pas pourquoi et je ne suis pas vraiment sûr de vouloir recommencer si je manque juste quelque chose d'évident.

Est-ce que quelqu'un sait pourquoi je reçois cette erreur et que puis-je faire pour la corriger?

Répondre

1

MISE À JOUR: la réponse originale (en commençant par « toutefois ») est plus nécessaire, il suffit d'utiliser requests 2.10.0 ou au-dessus, ou au-dessus urllib3 1.15.1 et 0.6.2 requests_toolbelt ou au-dessus et effectuer les opérations suivantes dans votre main():

from requests_toolbelt.adapters import appengine 
appengine.monkeypatch() 

CEPENDANT si vous utilisez les anciennes versions de demandes et/ou urllib3, alors vous avez besoin des correctifs ci-dessous:

Ceci peut être accompli en utilisant une version patchée de requests avec le package requests-toolbelt. Les threads qui appliquent:

J'ai appliqué tout cela et ont maintenant python-social-auth et facebook-sdk travailler dans les deux locaux test (le serveur de dev) et production (App Engine complet).

+0

quels correctifs avez-vous appliqués, exactement? – kzh

+0

Je confirme que cela fonctionne. La clé est le dernier lien: https://github.com/sigmavirus24/requests-toolbelt/pull/119 – kzh

+1

Espérons que tous ces correctifs seront bientôt intégrés dans les versions officielles de ces bibliothèques et qu'aucun correctif ne sera nécessaire :) – seawolf

1

Cela arrive parce que le SDK Facebook dépend de la géniale bibliothèque requests. Toutefois, requests ne fonctionne pas sur Google App Engine, car la plate-forme comporte certaines restrictions. Vous devez utiliser leurs API urlfetch pour récupérer des contenus externes sur Google App Engine.

Alors oui, le SDK Facebook officiel ne fonctionnera pas. Vous devez rouler votre propre solution ou en trouver une qui fonctionne. SimpleAuth est l'une des solutions connues pour avoir fonctionné.

+0

Eh bien, ça craint ... mais en général, je suis totalement à l'aise avec le bac à sable, je n'avais pas réalisé que c'était ce qui se passait. OK, 'SimpleAuth' c'est. Merci! – seawolf

+0

'requests' fonctionne maintenant sous App Engine (avec quelques correctifs) ... J'ai remplacé la réponse pour inclure des liens vers les documents pertinents. – seawolf

0

Dans vos bibliothèques vendues, assurez-vous que vous avez request_toolbelt. (pip install -t lib requests_toolbelt). Ensuite, "monkeypatch" appengine le support avant que python-social-auth appelle les requêtes. Dans mon projet/wsgi.py, j'ai ajouté les lignes suivantes:

from requests_toolbelt.adapters import appengine 
appengine.monkeypatch() 
dépend requests,

python-auth-sociale il devrait exister aussi dans votre répertoire des fournisseurs.

Vous devez également vous assurer que vous utilisez des demandes version> = 2.10.0. Cela n'a pas encore été publié, donc vous pouvez le truquer. Editez lib/requests/__init__.py de sorte que __build__ = 0x021000. Vous devez également mettre à niveau la version packagée de urllib3 dans le répertoire lib/requests/packages/ vers la dernière version.

C'est ce qui a fonctionné pour moi.

+0

J'ai essayé tout cela et cela n'a pas fonctionné pour moi, avec GAE SDK 1.9.36 – Bodhi

+0

fonctionne pour moi! avec urllib3 1.15.1. [détails ci-dessous.] (http://stackoverflow.com/questions/34574740/python-social-auth-failure-on-google-app-engine/35944044#comment61501928_35109359) – ryan

+0

Cela ne fonctionnait pas pour moi avec le dernier GAE SDK soit. Je suis revenu à une version vers janvier 2016 (gcloud 94.0.0, GAE 1.9.31) à l'adresse –