feat: added endpoints: auth, pofile, account, keyring #5

Merged
ivan.dev merged 10 commits from VORKOUT-4 into master 2025-05-15 15:21:33 +05:00
2 changed files with 4 additions and 3 deletions
Showing only changes of commit 23329e7d36 - Show all commits

View File

@ -49,7 +49,7 @@ async def get_user(connection: AsyncConnection, login: str) -> Optional[User]:
return user, password
async def upgrade_old_refresh_token(connection: AsyncConnection, user) -> Optional[User]:
async def upgrade_old_refresh_token(connection: AsyncConnection, user,refresh_token) -> Optional[User]:
ivan.dev marked this conversation as resolved Outdated

Он все текущие токены пометит устаревшими у аккаунта?

Тут момент - он должен экспайрить конкретный рефреш токен, т.к. один Пользователь может заходить с нескольких устройств.

Он все текущие токены пометит устаревшими у аккаунта? Тут момент - он должен экспайрить конкретный рефреш токен, т.к. один Пользователь может заходить с нескольких устройств.

Как при решении этой проблемы привязать рефреш токен к конкретной сессии?
Когда пользователь заходит(логин/пароль) я могу получить только все ключи по его ID.

Как при решении этой проблемы привязать рефреш токен к конкретной сессии? Когда пользователь заходит(логин/пароль) я могу получить только все ключи по его ID.

Ты прав в отсутствии привязки. А я про то, что в update_query надо ставить фильтрацию по expiry как минимум, т.е. при генерации нового рефреша не губить скопом все старые как минимум.

По поводу сессионной привязки я подумаю, стоит ли её организовывать по идентификатору сессию, который по идее должен тоже быть у нас на руках.

Ты прав в отсутствии привязки. А я про то, что в update_query надо ставить фильтрацию по expiry как минимум, т.е. при генерации нового рефреша не губить скопом все старые как минимум. По поводу сессионной привязки я подумаю, стоит ли её организовывать по идентификатору сессию, который по идее должен тоже быть у нас на руках.
new_status = KeyStatus.EXPIRED
@ -58,7 +58,8 @@ async def upgrade_old_refresh_token(connection: AsyncConnection, user) -> Option
.where(
account_table.c.id == user.id,
account_keyring_table.c.status == KeyStatus.ACTIVE,
account_keyring_table.c.key_type == KeyType.REFRESH_TOKEN
account_keyring_table.c.key_type == KeyType.REFRESH_TOKEN,
account_keyring_table.c.key_value == refresh_token
)
.values(status=new_status)
)

View File

@ -129,7 +129,7 @@ async def refresh(
except Exception as e:
await upgrade_old_refresh_token(connection,current_user)
await upgrade_old_refresh_token(connection,current_user,refresh_token)
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,