Ну собственно:
в редаксе у нас есть middleware типа санок или саг.
Вот ты в ней вызываешь например функцию которая тебе запрос на сервер делает.
Пусть сервер тебе токен высылает, который автоматом в куки попадает (которые только HTTPOnly)
Как ты знаешь куки каждый раз автоматом при запросе на сервер уходят
Значит и токен доступа также будет автоматом туда уходить.
Далее при запросе на вход в систему тебе сервер ответит кодом 200 если ты успешно вошел в систему,
или не ответит или ответит с кодом больше 400, если ошибка.
Вот ты проверяешь этот код и если он 200, то в редаксе флаг какой нибудь ставишь на true,
Например он у тебя будет наызваться isAuthenticated.
Вот когда isAuthenticated === true это значит что ты в систему вошел,
а вот когда isAuthenticated === false это значит что ты не вошел в систему.
Соотвтетсвенно логику работы программы нужно делать в соответствии со значением этого флага.
напиример при isAuthenticated === true мы какие то маршруты или компонеты делаем доступными, а при isAuthenticated === false не позваоляем пользователю получить к ним доступ.
Соотвественно при log out ты делаешь запрос на сервер о том что ты вышел из системы, что бы он обнулил токен доступа и вторым действием устанавливаешь isAuthenticated=false.
Есть еще нюансы с истечением срока годности токена во время работы программы, обновлением его посредством refreshToken и.т.д и т.п.