2014-10-20 2 views
0

Я добавляю логин google в свое приложение django для использования только в моем офисе. Логины работают нормально, но я пытаюсь добавить страницы ошибок. Я написал страницу ошибки входа в/login/error, которая дает немного информации о том, что пошло не так, но я не могу заставить django отображать эту страницу, когда это необходимо.Django python-social-auth перенаправление при сбое?

Вход в систему не удастся, если учетная запись gmail не входит в учетную запись наших компаний (*@myoffice.com) или когда пользователь отказывает в разрешении. Я бы хотел, чтобы он перенаправлял/login/error, но перенаправление никогда не работает.

Я попытался добавить

SOCIAL_AUTH_LOGIN_ERROR_URL = '/login/error/' 
SOCIAL_AUTH_BACKEND_ERROR_URL = '/login/error/' 

в мой файл settings.py. Не поймает ошибку, с которой я пытаюсь справиться с этой страницей. Я могу подтвердить, что/login/error работает правильно, и проблема заключается только в получении правильного перенаправления.

Любая помощь была бы принята с благодарностью.

Update: Heres некоторые больше кода, так как это было не так быстро исправить, как я надеялся

От settings.py (ключ и секрет опущен, белый список URL изменен)

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'thelibrary', 
    'home', 
    'social.apps.django_app.default', 
) 

AUTHENTICATION_BACKENDS = (
    'social.backends.google.GoogleOAuth2', 
    'django.contrib.auth.backends.ModelBackend', 
) 


LOGIN_REDIRECT_URL = '/' 


SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['example.com'] 

SOCIAL_AUTH_LOGIN_ERROR_URL = '/login/error/' 
SOCIAL_AUTH_BACKEND_ERROR_URL = '/login/error/' 

Из моего шаблона, который запрашивает регистрацию пользователя

{% if user and not user.is_anonymous %} 

    Not yet implemented 

{% else %} 
    Welcome guest! 
    <br /> 
    Please <a href="{% url 'social:begin' 'google-oauth2' %}?next={{ request.path }}">Login with Google</a> 
{% endif %} 

Heres выход ошибки я получаю в консоли, когда запрос не

[21/Oct/2014 13:44:42] "GET /login/google-oauth2/ HTTP/1.1" 302 0 
[21/Oct/2014 13:44:51] "GET /complete/google-oauth2/?state=3YjuxWntctsrg6emGEPfMjzeeP4NSazX&code=4/lobir0Y2ZZnEPnJRE99gjqhjZh2RbwJC2wfCrs5Zy9A.Envfd1PM7OcaXmXvfARQvtiwnetlkgI HTTP/1.1" 500 157344 
+0

Возможно, проблема заключается в том, что '' python-social-auth'' захватывает ваш URL ''/login/error/'', как если бы это был URL '' backend'' (например, ''/login/google- oauth2/''), поэтому он пытается попытаться войти в систему, используя бэкэнд '' error'', который, очевидно, не существует. Попробуйте изменить формат URL на ''/login-error'', чтобы узнать, работает ли это. – omab

ответ

0

SOCIAL_AUTH_LOGIN_ERROR_URL кажется правильным выбором, это сработало для меня. Вероятно, ошибка в другом месте вашего приложения, но без какого-либо кода невозможно сказать.

Где браузер перенаправляется, вместо этого?

Вы можете проверить свои инструменты разработчика, чтобы просмотреть историю сети (просто убедитесь, что она не очистится при перенаправлении/перезагрузке). Чтение всех запросов и попытка понять их порядок и точку отказа могут дать вам некоторый намек.

+0

Я добавил код и ошибку, которую я получаю в консоли тестового сервера. –

+0

Итак, ваш сервер возвращает код ошибки 500 в/complete/google-oauth2/.. request, вам следует выяснить причину. Проверьте панель инструментов разработчика в браузере, чтобы узнать, каково содержание ответа на этот запрос. Если вы можете запустить Django в режиме отладки, он должен содержать некоторую трассировку стека или, по крайней мере, сообщение об ошибке. – Nopik