Я реализую систему аутентификации с помощью django и реагирую. Два приложения запускаются соответственно на портах 8000, 3000. Я реализовал систему аутентификации с помощью пакета Djoser. Этот пакет использует некоторые зависимости social_core и social_django. Вроде все настроено нормально. Я нажимаю кнопку входа в Google ... Меня перенаправляют на страницу входа в Google, а затем обратно в мое внешнее приложение для реагирования на порт 3000 с состоянием и кодом параметры на URL.
На этом этапе я отправляю эти параметры в серверную часть. Бэкэнд пытается проверить состояние, проверяя, присутствует ли ключ состояния в хранилище сеанса, используя приведенный ниже код из (social_core / backends / oauth.py)
def validate_state(self):
"""Validate state value. Raises exception on error, returns state
value if valid."""
if not self.STATE_PARAMETER and not self.REDIRECT_STATE:
return None
state = self.get_session_state()
request_state = self.get_request_state()
if not request_state:
raise AuthMissingParameter(self, 'state')
elif not state:
raise AuthStateMissing(self, 'state')
elif not constant_time_compare(request_state, state):
raise AuthStateForbidden(self)
else:
return state
На этом этапе по некоторым причинам ключа сеанса состояния нет ... и я получаю сообщение об ошибке, в котором говорится, что состояние не может быть найдено в данных сеанса (ошибка ниже)
{"error":["State could not be found in server-side session data."],"status_code":400}
Я резюмирую все свои действия:
- Внешний запрос к бэкэнду для генерации с учетом URL-адреса перенаправления провайдера google-oauth2. С помощью этого действия создается URL-адрес, а ключ состояния сохраняется в сеансе с определенным значением (google-oauth2_state).
- Внешний интерфейс получает URL-адрес и перенаправляет на страницу аутентификации Google.
- Аутентификация с помощью Google и перенаправление обратно к интерфейсу с параметрами state и code в URL-адресе.
- Внешний интерфейс получает URL-адрес формы данных и отправляет данные на сервер, чтобы убедиться, что полученное состояние равно сгенерированному в точке (1).
По некоторым причинам код штата не сохраняется ... Мы будем очень благодарны за любые идеи и помощь.
Спасибо всем.