Skip to content

Commit 2aa21dc

Browse files
authored
Token refresh each time when req’s are met (#197)
## Изменения <!-- Опишите здесь на языке, понятном каждому, изменения, сделанные в исходном коде по пунктам. --> 1) исправлены ошибки в readme 2) автопродление перемещено в dependency и добавлена проверка на право продления ## Check-List <!-- После сохранения у следующих полей появятся галочки, которые нужно проставить мышкой --> - [x] Вы проверили свой код перед отправкой запроса? - [x] Вы написали тесты к реализованным функциям? - [x] Вы не забыли применить форматирование `black` и `isort` для _Back-End_ или `Prettier` для _Front-End_?
1 parent 484047d commit 2aa21dc

3 files changed

Lines changed: 10 additions & 9 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ foo@bar:~$ pip install -r requirements.txt
3333

3434
4) Запускайте приложение!
3535
```console
36-
foo@bar:~$ python -m auth_backend
36+
foo@bar:~$ python -m auth_backend start
3737
```
3838

3939
---

auth_backend/routes/user_session.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from auth_backend.auth_plugins.email import Email
1111
from auth_backend.base import StatusResponseModel
1212
from auth_backend.exceptions import ObjectNotFound, SessionExpired
13-
from auth_backend.models.db import AuthMethod, UserSession, session_expires_date
13+
from auth_backend.models.db import AuthMethod, UserSession
1414
from auth_backend.schemas.models import (
1515
Session,
1616
SessionPatch,
@@ -53,7 +53,6 @@ async def me(
5353
),
5454
) -> dict[str, str | int]:
5555
auth_params = Email.get_auth_method_params(session.user_id, session=db.session)
56-
session.expires = session_expires_date() # Автопродление сессии при активности пользователя
5756
result: dict[str, str | int] = {}
5857
result = (
5958
result

auth_backend/utils/security.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from starlette.requests import Request
88
from starlette.status import HTTP_403_FORBIDDEN
99

10-
from auth_backend.models.db import UserSession
10+
from auth_backend.models.db import UserSession, session_expires_date
1111

1212

1313
class UnionAuth(SecurityBase):
@@ -21,6 +21,7 @@ class UnionAuth(SecurityBase):
2121
auto_error: bool
2222
allow_none: bool
2323
_scopes: list[str] = []
24+
_SESSION_UPDATE_SCOPE = 'auth.session.update'
2425

2526
def __init__(self, scopes: list[str] = None, allow_none=False, auto_error=False) -> None:
2627
super().__init__()
@@ -49,12 +50,13 @@ async def __call__(
4950
if not user_session:
5051
self._except()
5152
user_session.last_activity = datetime.datetime.utcnow()
52-
db.session.commit()
53+
5354
if user_session.expired:
5455
self._except()
55-
if len(
56-
set([_scope.lower() for _scope in self._scopes])
57-
& set([scope.name.lower() for scope in user_session.scopes])
58-
) != len(set(self._scopes)):
56+
session_scopes = set([scope.name.lower() for scope in user_session.scopes])
57+
if self._SESSION_UPDATE_SCOPE in session_scopes:
58+
user_session.expires = session_expires_date()
59+
db.session.commit()
60+
if len(set([_scope.lower() for _scope in self._scopes]) & session_scopes) != len(set(self._scopes)):
5961
self._except()
6062
return user_session

0 commit comments

Comments
 (0)