Изменения подтверждения почты
This commit is contained in:
parent
6b9295d24f
commit
2ce40700bd
4 changed files with 22 additions and 36 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -76,8 +76,8 @@ class STokenLogin(BaseModel):
|
|||
authorization: str
|
||||
|
||||
|
||||
class SEmailVerification(BaseModel):
|
||||
email_verification: bool
|
||||
class SUserCode(BaseModel):
|
||||
user_code: str
|
||||
|
||||
|
||||
class SCreateInvitationLink(BaseModel):
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue