2013-11-14 7 views
5

ho creato un ID client e client segreto da the google cloud api console e ha aggiunto un record nella Sociale apps tavolo per django-allauthdjango-allauth signin con Google reindirizza a URL sviluppo anche nella produzione

ho anche aggiunto WEB ORIGIN:

  1. mysite.com (prod)
  2. http://localhost:8000 (dev)

e REDIRECT URI

  1. http:mysite.com/accounts/google/login/callback/ (prod)
  2. localhost:8000/accounts/google/login/callback/ (dev)

nella console API di Google.

Accedi con Google funziona in modo ottimale per lo sviluppo e reindirizza all'url di callback localhost all'accesso riuscito. Ma sto ricevendo un errore redirect_uri_mismatch in prod.

Questi sono i dettagli dell'errore dalla pagina di errore di Google:

domanda Dettagli

cookie_policy_enforce=false 
scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email 
response_type=code 
access_type=online 
redirect_uri=http://127.0.0.1:8000/accounts/google/login/callback/ 
state=SOME_RANDOM_NUMBER 
display=page 
client_id=MY_CLIENT_ID 

Il redirect_uri è ancora impostato su 127.0.0.1 invece di http:mysite.com/accounts/google/login/callback/

Allora, come faccio a impostare il corretto redirect_uri?

Questo è il mio settings.py pertinenza django-allauth

INSTALLED_APPS = (
    #the usual stuff 
    'allauth', 
    'allauth.account', 
    'allauth.socialaccount', 
    'allauth.socialaccount.providers.google', 
) 

import django.conf.global_settings as DEFAULT_SETTINGS 

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    "allauth.account.context_processors.account", 
    "allauth.socialaccount.context_processors.socialaccount", 
) 

AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend", 
    "allauth.account.auth_backends.AuthenticationBackend", 
) 

ACCOUNT_EMAIL_REQUIRED = True 

LOGIN_REDIRECT_URL = "/" 

Ecco urls.py

urlpatterns = patterns('', 

    url(r'^accounts/', include('allauth.urls')), 

) 

non ho fatto altre django-allauth impostazioni. Ho visto il docs e non sono riuscito a trovare dove effettuare la modifica.

risposta

7

Ho riscontrato che il problema si verifica perché il proxy nginx, che si trova di fronte al server delle app Python, imposta l'intestazione HTTP Host su localhost.

Quindi quando allauth tenta di fare request.build_absolute_uri, HTTP_HOST è localhost.

Così ho impostato l'impostazione proxy_set_header nello nginx configuration file che ha risolto il problema.

proxy_set_header Host $http_host; 

vedono anche Facebook oauth authentication is redirecting to localhost instead of to my domain per lo stesso problema in un altro avatar.