2012-12-08 31 views
6

Uderzyłem głową w ścianę, próbując uruchomić django-social-auth. Mój serwer dev to serwer w sieci prywatnej w mojej pracy, do którego dostęp ma 10.0.0. * Adres IP. Na tym serwerze działa wiele aplikacji django. Oto konfiguracja, którą mam dla tej aplikacji:django-social-auth redirect_uri nieprawidłowy

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

Używam aplikacji backbone.js z mojego katalogu statycznego. Mogę więc przejść do wersji 10.0.0.54/perceptual/static/ i pobrać moją aplikację szkieletową.

TERAZ, Mam mój APP_ID i FACEBOOK_API_SECRET Facebooka w moim pliku ustawień, wszystkie poprawnie skonfigurowane. Mam również linię w moim pliku/etc/hosts na moim rzeczywistej komputerze (nie serwer dev), który kieruje myapp.com do 10.0.0.54, a mój Facebook app config do adresu URL App Domains i strony wyglądać tak:

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

problem jest, gdy idę do perceptual.com/perceptual/static/login/facebook/ daje mi ten błąd: Facebook Error (django-social-auth)

Oto co mój URL wygląda, gdy Otrzymuję ten błąd: 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

Możesz więc zobaczyć na podstawie adresu URL mojego redirect_uri: http://localhost:8001 - Ale nie chcę, żeby tak było, oczywiście. Jak tylko go zmienić na perceptual.com, robi się trochę dalej: Potem dostaję ten błąd:

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

Oto mój traceback, if it helps

W tym momencie utknąłem - Jak mogę dostać mój serwer, aby zmienić redirect_uri na coś, co obsługuje Facebook, zamiast 127.0.0.1:8000? Domyślam się, że pochodzi od Django, ale nie jestem pewien, jak to zmienić. Następnie, gdy zostanie to naprawione, nadal nie może w pełni uwierzytelnić się i otrzyma błąd opisany powyżej. Każda pomoc będzie bardzo ceniona. Dzięki wielkie!

Odpowiedz

11

django-social-auth używa request.build_absolute_uri() do zbudowania tego parametru redirect_uri. Sprawdzanie kodu django dla build_absolute_uri() to wywołanie get_host(), które sprawdza się pod kątem , HTTP_HOST lub SERVER_NAME.

Spróbuj zdefiniować którykolwiek z tych nagłówków w twoim recepturze lokalizacji (myślę, że jest tam proxy_set_header).

+5

Dziękuję, omab! Byłem w stanie ustawić tę konfigurację w moim pliku konfiguracyjnym nginx: 'proxy_set_header X-Forwarded-Host 'xxxxx.com';' iw moim pliku django settings.py: 'USE_X_FORWARDED_HOST = True' I to wszystko. pracujący. Dzięki jeszcze raz! –

+1

@JamesRasmussen yep, 'USE_X_FORWARDED_HOST = True' było również tym, czego mi brakowało. Dzięki. –

+0

również tutaj znajdują się ustawienia związane z sytuacją odwrotnego proxy: http://django-social-auth.readthedocs.org/en/latest/configuration.html#processing-redirects-and-urlopen –