@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 в БД и его же я передаю в запросе . Но какая логика должна быть при большом кол-ве пользователей?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JWT используется в stateless-режимах. Основной токен на сервере не хранится вообще. Он подписан выдающим сервером и, если подпись верна, то рабочий сервер просто доверяет информации в токене.
Если клиент не прислал токен или прислал просроченный токен или подпись неверна, то в ответ сервер требует авторизацию. Если пришёл действительный токен, то сервер просто использует данные из токена.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы