2012-12-08 1 views
6

J'ai été cogner la tête contre le mur en essayant d'obtenir travail-auth django-sociale. Mon serveur dev est un serveur dans un réseau privé à mon travail, accessible par une adresse IP 10.0.0. *. Nous avons plusieurs applications django en cours d'exécution sur ce serveur. Voici la config que j'ai pour cette application:django-auth-sociale redirect_uri invalide

# Perceptual 
location /perceptual/static/ { 
     alias /opt/perceptual/perceptual/static/; 
} 
location /perceptual/ { 
     proxy_pass http://127.0.0.1:8001; 
} 

Je suis en cours d'exécution d'une application Backbone.js de mon répertoire statique avec cela. Donc, je peux aller à 10.0.0.54/perceptual/static/, et obtenir mon application backbone.

Maintenant, J'ai mon Facebook APP_ID et FACEBOOK_API_SECRET dans mon fichier de paramètres, tous correctement configurés. J'ai également une ligne dans mon fichier/etc/hosts sur mon réelle machine (pas le serveur de dev) qui dirige myapp.com à 10.0.0.54, et mon application Facebook config pour l'App Domains et l'URL du site ressembler à ceci:

App Domains: perceptual.com 
Site URL: http://perceptual.com 

Le problème est, chaque fois que je vais me donne perceptual.com/perceptual/static/login/facebook/ cette erreur: Facebook Error (django-social-auth)

Voici ce que mon URL ressemble quand Je reçois cette erreur: https://www.facebook.com/dialog/oauth?scope=email&state=PC0OhXnEuaW2wcUuINO0rMSMAtVDuMbn&redirect_uri=http%3A%2F%2F127.0.0.1%3A8001%2Fperceptual%2Fcomplete%2Ffacebook%2F%3Fredirect_state%3DPC0OhXnEuaW2wcUuINO0rMSMAtVDuMbn&client_id=419178148154217

Ainsi, vous pouvez voir à partir de l'URL que mon redirect_uri est http://localhost:8001 - Mais je ne veux pas que ce soit que, de toute évidence. Dès que je change à perceptual.com, il devient un peu plus loin: Puis-je obtenir cette erreur: je suis coincé

AuthFailed at /perceptual/complete/facebook/ 
Authentication failed: There was an error authenticating the app 

Voici mon traceback, if it helps

À ce stade, - Comment puis-je mon serveur pour changer le redirect_uri à quelque chose que Facebook peut gérer, au lieu de 127.0.0.1:8000? Je suppose que ça vient de Django, mais je ne sais pas comment le changer. Ensuite, une fois que c'est corrigé, il ne peut toujours pas s'authentifier complètement et obtient l'erreur indiquée ci-dessus. Toute aide serait grandement appréciée. Merci beaucoup!

Répondre

11

django-auth-social utilise request.build_absolute_uri() pour construire ce paramètre redirect_uri. Vérification du code de django pour build_absolute_uri() appelle get_host() qui vérifie HTTP_X_FORWARDED_HOST, HTTP_HOST ou SERVER_NAME.

Essayez de définir l'un de ces en-têtes dans la recette de l'emplacement (je pense qu'il ya une proxy_set_header pour cela).

+5

Merci, omab! J'ai pu définir cette config dans mon fichier de configuration nginx: 'proxy_set_header X-Forwarded-hôte 'xxxxx.com', fichier' et dans mon django settings.py: 'USE_X_FORWARDED_HOST = TRUE' Et qui a obtenu tout ce qu'il travail. Merci encore! –

+1

@JamesRasmussen yep, 'USE_X_FORWARDED_HOST = True' était le morceau qui me manquait aussi. Merci. –

+0

également ici sont les paramètres liés à inverser la situation proxy: http://django-social-auth.readthedocs.org/en/latest/configuration.html#processing-redirects-and-urlopen –

Questions connexes