2013-11-14 1 views
5

Я создал идентификатор клиента и секрет клиента от the google cloud api console и добавил запись в социальных приложениях таблицы django-allauthДжанго-allauth зарегистрировались с помощью Google перенаправляет на URL развития даже в производстве

Я также добавил WEB ORIGIN:

  1. mysite.com (прод)
  2. http://localhost:8000 (DEV)

и REDIRECT URI

  1. http:mysite.com/accounts/google/login/callback/ (прод)
  2. localhost:8000/accounts/google/login/callback/ (DEV)

в консоли API Google.

Войти с Google работает отлично в разработке и перенаправляет на URL-адрес обратного вызова localhost при успешной регистрации. Но я получаю ошибку redirect_uri_mismatch в prod.

Эти сведения об ошибке из страницы ошибки Google:

Запрос детали

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 

redirect_uri по-прежнему установлен в 127.0.0.1 вместо http:mysite.com/accounts/google/login/callback/

Так как я установил правильный redirect_uri?

Это мой settings.py отношение к 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 = "/" 

Вот urls.py

urlpatterns = patterns('', 

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

) 

Я не сделал каких-либо других django-allauth настройки. Я видел docs и не мог найти, где внести изменения.

ответ

7

Я обнаружил, что проблема возникает из-за того, что прокси-сервер nginx, расположенный перед сервером приложений python, устанавливает заголовок HTTP Host в localhost.

Поэтому, когда allauth пытается сделать request.build_absolute_uri, HTTP_HOST является localhost.

Поэтому я установил параметр proxy_set_header в nginx configuration file, который исправил проблему.

proxy_set_header Host $http_host; 

Также см Facebook oauth authentication is redirecting to localhost instead of to my domain по тому же вопросу в другой аватар.