Файл cookie g_state для входа в систему одним нажатием не может быть проанализирован на http.cookies SimpleCookie

#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>