Задать вопрос
@Lepilov

Как привязать нужного пользователя к правильной сессии?

Помогите разобраться в работе сессий пользователя на основе JWT. Сейчас реализовал такой функционал:
при авторизации пользователя создается JWT который записывается в redis в таком виде
{
'session' : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0.yRQYnWzskCZUxPwaQupWkiUzKELZ49eM7oWxAQK_ZXw
}

В токене есть нужная инфа по юзеру - id, email, permission_type

теперь, как я понимаю каждый запрос где должна выполняться проверка на авторизацию должен проверять наличие у пользователя сессии либо редиректить на страницу log_in
Код у меня на питоне, но смысл я думаю понятен
async def get_current_user():
    try:
        session = await redis_cache.get('session')
        payload = jwt.decode(
            session,
            config('JWT_SECRET'),
            algorithms=config('JWT_ALGORITHM'),
        )
        return payload['user']
    except Exception as e:
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN, detail="Invalid authentication"
        )

Мой вопрос:
как сматчить пользователя с токеном в редисе, вот этот вот запрос
session = await redis_cache.get('session')
как понять какой ключ передавать в запросе get('session')
И какой ключ использовать при формировании записи токена в БД.
Т.е сейчас у меня хардкод для одного пользователя, есть ключ session в БД и его же я передаю в запросе . Но какая логика должна быть при большом кол-ве пользователей?
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JWT используется в stateless-режимах. Основной токен на сервере не хранится вообще. Он подписан выдающим сервером и, если подпись верна, то рабочий сервер просто доверяет информации в токене.
Если клиент не прислал токен или прислал просроченный токен или подпись неверна, то в ответ сервер требует авторизацию. Если пришёл действительный токен, то сервер просто использует данные из токена.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы