Значение сеанса отсутствует после перенаправления с помощью django python-social-auth

Я работаю над проектом django, использующим python-social-auth для аутентификации на Facebook. Я использую сервер django на локальном хосте и настроил Facebook с моим приложением для перенаправления наhttp://127.0.0.1:8000/complete/facebook/, который запускает конвейер python-social-auth для аутентификации пользователя. Я использую Postgres в качестве базы данных.

Когда этот метод вызывается и пытается аутентифицироваться, он не может найти информацию о сеансе. Отhttps://github.com/omab/python-social-auth/issues/534 Я думаю, сессионный cookie перезаписывается. Если я отправляю перенаправление facebook на другой URL, чтобы загрузить статическую страницу без аутентификации, ошибки не возникает, но я также не аутентифицируюсь и не получаю какую-либо информацию от facebook.

Как бы я не перезаписывал cookie-файл sessionid - если это, конечно, актуальная проблема - или есть другая проблема, которую я мог бы здесь упустить?

[03/Jun/2016 05:19:58] "GET /login/facebook/?next=/lithium-web/ HTTP/1.1" 302 0
Internal Server Error: /complete/facebook/
Traceback (most recent call last):
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/apps/django_app/utils.py", line 51, in wrapper
    return func(request, backend, *args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/apps/django_app/views.py", line 28, in complete
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/actions.py", line 43, in do_complete
    user = backend.complete(user=user, *args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/base.py", line 41, in complete
    return self.auth_complete(*args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper
    return func(*args, **kwargs)
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/facebook.py", line 71, in auth_complete
    state = self.validate_state()
  File "/Users/mac/Desktop/lithium-web/lib/python2.7/site-packages/social/backends/oauth.py", line 88, in validate_state
    raise AuthStateMissing(self, 'state')
AuthStateMissing: Session value state missing.

Ответы на вопрос(3)

Решение Вопроса

что cookie сеанса не был сохранен по URL-адресу, отличному от https При тестировании на локальном хосте с параметром SESSION_COOKIE_SECURE, установленным в True в django, файлы cookie сеанса не будут сохраняться между перенаправлениями, и вы получите эту ошибку при любом изменении страницы, где будет проверяться сеанс.

SESSION_COOKIE_SECURE = Ложно для тестирования, и все хорошо

 dietbacon06 сент. 2016 г., 01:23
как ты делаешь это на производстве?
 phaazon06 сент. 2016 г., 14:08
они не, они просто оставили работу! :)
 dan arters28 окт. 2016 г., 17:53
Просто установите значение True, если вы хотите разрешить сеансовые куки-файлы только через соединение https (что вы, вероятно, делаете)

LOGIN_REDIRECT_URL из настроек джанго.

На самом деле структура конвейера python_social_authLOGIN_REDIRECT_URL какnext я перенаправляю на URL, но, к сожалению, они не обрабатывают именованные шаблоны. Итак, когда мы устанавливаемLOGIN_REDIRECT_URL вmyapp:index это выдает эту ошибку.

Таким образом, либо удалите этот параметр, либо используйте прямые шаблоны, т.е.

LOGIN_REDIRECT_URL = myapp/index

добавив «SOCIAL_AUTH_REDIRECT_IS_HTTPS = True» в мой файл settings.py, так как моя конфигурация использует nginx для перенаправления на HTTPS. Я нашел этот ответ только прочитав документацию здесь:https://python-social-auth-docs.readthedocs.io/en/latest/configuration/settings.html

Ваш ответ на вопрос