1- import jwt
2- from fastapi_users .jwt import decode_jwt
3- from fastapi_users import exceptions
1+ from fastapi import status
2+ from loguru import logger
43
5- from .exceptions import UserNotVerified , PasswordNotValidError
4+ from .exceptions import PasswordNotValidError
65
76
8- class AuthenticationUserManagerMixin :
7+ class ActionUserManagerMixin :
98 """
10- Миксин добавляющий аутентификацию в логику менеджера
9+ Миксин для поддержки методов UserManager которые отвечают
10+ за дополнительную логику
1111 """
12+ async def on_after_request_verify (self , user , token , request ):
13+ """
14+ Здесь должна быть отправка на E-mail `token` который уже
15+ вмещает в себя дополнительное поле `email` для верификации.
16+ Этот токен нужно вписать в end-point `verify`.
1217
13- async def authenticate_user (self , token : str | None ):
14- if not token :
15- return
16- try :
17- data = decode_jwt (
18- token ,
19- self .verification_token_secret ,
20- [self .verification_token_audience ],
21- )
22- except jwt .PyJWTError :
23- raise exceptions .InvalidVerifyToken ()
18+ Для эмуляции отправки сюда в консоль выведется сам токен.
2419
25- try :
26- user_id = data ["sub" ]
27- email = data ["email" ]
28- except KeyError :
29- raise exceptions .InvalidVerifyToken ()
20+ Если в консоли вы не видете токена значит:
21+ - Вы уже верифицированы
22+ - Не правильные данные
23+ - Не активный пользователь
3024
31- try :
32- user = await self .get_by_email (email )
33- except exceptions .UserNotExists :
34- return
25+ Args:
26+ user (_type_): пользователь
27+ token (_type_): Токен с email
28+ request (_type_): сущность request
29+ """
30+ logger .warning ('TOKEN VERIFY ^^^^^------^^^^^ TOKEN VERIFY\n ' )
31+ logger .warning (token )
32+ logger .warning ('\n END TOKEN ^^^^^------^^^^^ END TOKEN' )
3533
36- try :
37- parsed_id = self .parse_id (user_id )
38- except exceptions .InvalidID :
39- raise exceptions .InvalidVerifyToken ()
34+ async def on_after_forgot_password (self , user , token , request ):
35+ """
36+ Здесь должна быть отправка на E-mail `token` который уже
37+ вмещает в себя дополнительное поле `password_fgpt` для верификации.
38+ Этот токен нужно вписать в end-point `reset-password`.
4039
41- if parsed_id != user .id :
42- raise exceptions .InvalidVerifyToken ()
40+ Для эмуляции отправки сюда в консоль выведется сам токен.
4341
44- if not user .is_verified :
45- raise UserNotVerified ()
42+ Если в консоли вы не видете токена значит:
43+ - Не правильные данные
44+ - Не активный пользователь
4645
47- return user
46+ Args:
47+ user (_type_): пользователь
48+ token (_type_): Токен с password_fgpt
49+ request (_type_): сущность request
50+ """
51+ logger .warning ('TOKEN RESET ^^^^^------^^^^^ TOKEN RESET\n ' )
52+ logger .warning (token )
53+ logger .warning ('\n END TOKEN ^^^^^------^^^^^ END TOKEN' )
54+
55+ async def on_after_reset_password (self , user , request ):
56+ """
57+ Здесь должна быть отправка на E-mail cообщения о изменения пароля.
58+
59+ Args:
60+ user (_type_): пользователь
61+ request (_type_): сущность request
62+ """
63+ return await super ().on_after_reset_password (user , request )
4864
4965
5066class PasswordValidationMixin :
@@ -54,4 +70,7 @@ class PasswordValidationMixin:
5470
5571 async def validate_password (self , password , user ):
5672 if not len (password ) > 7 :
57- raise PasswordNotValidError ('Password is not valid' )
73+ raise PasswordNotValidError (
74+ status_code = status .HTTP_400_BAD_REQUEST ,
75+ detail = 'Password is to short' ,
76+ )
0 commit comments