Изменения подтверждения почты

This commit is contained in:
urec56 2024-07-13 20:16:22 +04:00
parent 6b9295d24f
commit 2ce40700bd
4 changed files with 22 additions and 36 deletions

View file

@ -25,7 +25,7 @@ def generate_confirmation_code(length=6) -> str:
@celery.task
def send_registration_confirmation_email(user_data: dict) -> None:
user_data = SConfirmationData.model_validate(user_data)
invitation_token = encode_confirmation_token(user_data)
invitation_token = encode_confirmation_token(user_data.confirmation_code)
confirmation_link = settings.INVITATION_LINK_HOST + "/api/users/email_verification/link/" + invitation_token

View file

@ -23,7 +23,6 @@ from app.users.schemas import (
SUserLogin,
SUserRegister,
SUserResponse,
SEmailVerification,
SUserAvatars,
SUserFilter,
SUser,
@ -34,6 +33,7 @@ from app.users.schemas import (
SConfirmationData,
SUserPassword,
SGetUsersFilter,
SUserCode,
)
from app.tasks.tasks import (
send_registration_confirmation_email,
@ -131,39 +131,25 @@ async def resend_email_verification(user: SUser = Depends(get_current_user)):
await RedisService.set_verification_code(redis=redis_session, user_id=user.id, verification_code=user_code)
@router.get(
"/email_verification/link/{user_code}",
@router.post(
"/email_verification/{user_code}",
status_code=status.HTTP_200_OK,
response_model=SEmailVerification,
response_model=None,
)
async def email_verification(user_code: str, uow=Depends(UnitOfWork)):
user_data = decode_confirmation_token(user_code)
async def email_verification(user_code: SUserCode, user: SUser = Depends(get_current_user),uow=Depends(UnitOfWork)):
if len(user_code.user_code) == 6:
confirmation_code = user_code
else:
confirmation_code = decode_confirmation_token(user_code.user_code)
redis_session = get_redis_session()
async with uow:
verification_code = await RedisService.get_verification_code(redis=redis_session, user_id=user_data.user_id)
if verification_code != user_data.confirmation_code:
raise WrongCodeException
await uow.user.change_data(user_id=user_data.user_id, role=settings.VERIFICATED_USER)
await uow.commit()
return {"email_verification": True}
@router.get(
"/email_verification/code/{user_code}",
status_code=status.HTTP_200_OK,
response_model=SEmailVerification,
)
async def email_verification(user_code: str, user: SUser = Depends(get_current_user), uow=Depends(UnitOfWork)):
redis_session = get_redis_session()
async with uow:
verification_code = await RedisService.get_verification_code(redis=redis_session, user_id=user.id)
if verification_code != user_code:
raise WrongCodeException
if verification_code != confirmation_code:
raise WrongCodeException
async with uow:
await uow.user.change_data(user_id=user.id, role=settings.VERIFICATED_USER)
await uow.commit()
return {"email_verification": True}
@router.post(

View file

@ -76,8 +76,8 @@ class STokenLogin(BaseModel):
authorization: str
class SEmailVerification(BaseModel):
email_verification: bool
class SUserCode(BaseModel):
user_code: str
class SCreateInvitationLink(BaseModel):

View file

@ -44,15 +44,15 @@ def decode_invitation_token(invitation_token: str) -> SInvitationData:
return SInvitationData.model_validate_json(user_data)
def encode_confirmation_token(user_data: SConfirmationData) -> str:
invitation_token = cipher_suite.encrypt(user_data.model_dump_json().encode())
def encode_confirmation_token(confirmation_code: str) -> str:
invitation_token = cipher_suite.encrypt(confirmation_code.encode())
return invitation_token.decode()
def decode_confirmation_token(invitation_token: str) -> SConfirmationData:
def decode_confirmation_token(invitation_token: str) -> str:
user_code = invitation_token.encode()
user_data = cipher_suite.decrypt(user_code)
return SConfirmationData.model_validate_json(user_data)
confirmation_code = cipher_suite.decrypt(user_code).decode()
return confirmation_code
class AuthService: