Привет, ребята! У меня возникла проблема с аутентификацией в моем киоск-приложении. Мне нужно, чтобы два человека могли вставить свои смарт-карты и выполнить разные запросы.
Сейчас я использую fetch с credentials:include, и первый пользователь нормально аутентифицируется. Но потом оба запроса используют учетку первого юзера.
Как мне сделать так, чтобы для второго запроса использовалась другая сессия? Может, как-то очистить LTPA токен или создать новую сессию?
Наше приложение использует Set-Cookie и хранит токен в куки LTPA2 Token.
Да, с этим можно помучаться. Я бы предложил использовать sessionStorage для хранения токенов каждого юзера. Перед запросом доставай нужный токен и добавляй в заголовки:
Так сессии будут изолированы. Еще можно попробовать fetch с mode: 'no-cors' для второго запроса, чтобы точно не отправлялись куки. Главное не забыть почистить sessionStorage после использования.
Можно попробовать использовать fetch с опцией credentials: 'omit' для второго запроса. Это отключит отправку куков. Затем вручную добавь нужные заголовки авторизации для второго юзера. Типа так:
Может, стоит попробовать использовать разные экземпляры AbortController для каждого запроса? Создаешь два контроллера, привязываешь их к разным fetch-запросам. Это должно изолировать сессии. А еще можно попробовать очищать кэш браузера между запросами - иногда помогает сбросить авторизацию. Главное не забыть потом восстановить нужные данные. Как думаешь, может сработать такой подход?
Попробуй для разных пользователей создать отдельные заголовки с куками. Например, создай два объекта Headers с разными значениями LTPA2Token и передавай их в fetch-запросы. Так сессии не будут пересекаться. Как думаешь, поможет ли это?
да, проблема с сессиями в таких случаях довольно частая. мой совет - попробуй использовать новый экземпляр fetch для каждого юзера. это можно сделать с помощью WindowOrWorkerGlobalScope.fetch(). создай два отдельных объекта с разными настройками для каждого пользователя:
const fetch1 = new WindowOrWorkerGlobalScope.fetch();
const fetch2 = new WindowOrWorkerGlobalScope.fetch();
и потом используй их для запросов. так ты сможешь изолировать сессии и куки для разных юзеров.
если не поможет, еще вариант - перед вторым запросом удалять куки LTPA2 Token через document.cookie. главное не забудь потом восстановить куки первого юзера, если нужно