#python #cookies #request #google-signin #google-one-tap
#python #файлы cookie #запрос #google-вход #google-one-tap
Вопрос:
Я пытаюсь интегрировать Google для входа в систему одним нажатием на нашем веб-сайте. Для серверной части я использую сервер tornado, который использует http-библиотеку для анализа заголовка файла cookie и его настройки. Подробнее об tornado
обработке файлов cookie здесь . По сути, Google One-Tap login добавляет этот g_state
файл cookie, чтобы установить статус пользователя в отношении того, как он взаимодействует с модальным (исходным) модалом One-Tap, и это поведение, которое мы не можем изменить, не изменяя функциональность плагина.
Теперь по какой-то причине, когда я вызываю self.cookies
внутри обработчика запроса tornado, он возвращает пустой, даже если Cookie
заголовок установлен. Заголовок файла cookie выглядит следующим образом:
Cookie: g_state={"i_l":0}; token="abcde"
По какой-то причине он неправильно проанализировал заголовок файла cookie. Откопал некоторый код для анализа файлов cookie, которые использует tornado, и попробовал разные способы его изучения:
>>> from http.cookies import SimpleCookie
>>> token = 'g_state={"i_l":0};token="abcde"'
>>> dd = SimpleCookie()
>>> dd.load(token)
>>> dd
<SimpleCookie: >
# now try to rearranged the g_state to appear after token
>>> token2 = 'token="abcde";g_state={"i_l":0}'
>>> dd = SimpleCookie()
>>> dd.load(token2)
>>> dd
<SimpleCookie: token='abcde'>
# added sample token after it to check if it parses the cookies after g_state
>>> token2 = 'token="abcde";g_state={"i_l":0};other_token="hijkl"'
>>> dd = SimpleCookie()
>>> dd.load(token2)
>>> dd
<SimpleCookie: token='abcde'>
# without it
>>> token3 = 'token="abcde"'
>>> dd = SimpleCookie()
>>> dd.load(token3)
>>> dd
<SimpleCookie: token='abcde'>
Таким образом, другие файлы cookie по-прежнему анализируются до тех пор, пока они находятся перед файлом g_state
cookie. Все остальное после этого не поддается анализу. Попытался найти эту проблему, и, похоже, возникла проблема в библиотеке http.cookies при разборе файлов cookie в фигурных скобках (источник).
Кто-нибудь знает, как отформатировать запрос клиента, чтобы предотвратить отправку файла cookie g_state
или, по крайней мере, найти способ не влиять на него при разборе всех других токенов в Cookie
заголовке? Например, может быть, переставить файл g_state
cookie, чтобы всегда ставить конец?
Ответ №1:
Обходной путь, который работает для меня: Javascript удаляет файл cookie g_state на всех html-страницах.
<script>document.cookie = "g_state=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";</script>