Изменения подтверждения почты
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
|
@celery.task
|
||||||
def send_registration_confirmation_email(user_data: dict) -> None:
|
def send_registration_confirmation_email(user_data: dict) -> None:
|
||||||
user_data = SConfirmationData.model_validate(user_data)
|
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
|
confirmation_link = settings.INVITATION_LINK_HOST + "/api/users/email_verification/link/" + invitation_token
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ from app.users.schemas import (
|
||||||
SUserLogin,
|
SUserLogin,
|
||||||
SUserRegister,
|
SUserRegister,
|
||||||
SUserResponse,
|
SUserResponse,
|
||||||
SEmailVerification,
|
|
||||||
SUserAvatars,
|
SUserAvatars,
|
||||||
SUserFilter,
|
SUserFilter,
|
||||||
SUser,
|
SUser,
|
||||||
|
@ -34,6 +33,7 @@ from app.users.schemas import (
|
||||||
SConfirmationData,
|
SConfirmationData,
|
||||||
SUserPassword,
|
SUserPassword,
|
||||||
SGetUsersFilter,
|
SGetUsersFilter,
|
||||||
|
SUserCode,
|
||||||
)
|
)
|
||||||
from app.tasks.tasks import (
|
from app.tasks.tasks import (
|
||||||
send_registration_confirmation_email,
|
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)
|
await RedisService.set_verification_code(redis=redis_session, user_id=user.id, verification_code=user_code)
|
||||||
|
|
||||||
|
|
||||||
@router.get(
|
@router.post(
|
||||||
"/email_verification/link/{user_code}",
|
"/email_verification/{user_code}",
|
||||||
status_code=status.HTTP_200_OK,
|
status_code=status.HTTP_200_OK,
|
||||||
response_model=SEmailVerification,
|
response_model=None,
|
||||||
)
|
)
|
||||||
async def email_verification(user_code: str, uow=Depends(UnitOfWork)):
|
async def email_verification(user_code: SUserCode, user: SUser = Depends(get_current_user),uow=Depends(UnitOfWork)):
|
||||||
user_data = decode_confirmation_token(user_code)
|
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()
|
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)
|
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.user.change_data(user_id=user.id, role=settings.VERIFICATED_USER)
|
||||||
await uow.commit()
|
await uow.commit()
|
||||||
return {"email_verification": True}
|
|
||||||
|
|
||||||
|
|
||||||
@router.post(
|
@router.post(
|
||||||
|
|
|
@ -76,8 +76,8 @@ class STokenLogin(BaseModel):
|
||||||
authorization: str
|
authorization: str
|
||||||
|
|
||||||
|
|
||||||
class SEmailVerification(BaseModel):
|
class SUserCode(BaseModel):
|
||||||
email_verification: bool
|
user_code: str
|
||||||
|
|
||||||
|
|
||||||
class SCreateInvitationLink(BaseModel):
|
class SCreateInvitationLink(BaseModel):
|
||||||
|
|
|
@ -44,15 +44,15 @@ def decode_invitation_token(invitation_token: str) -> SInvitationData:
|
||||||
return SInvitationData.model_validate_json(user_data)
|
return SInvitationData.model_validate_json(user_data)
|
||||||
|
|
||||||
|
|
||||||
def encode_confirmation_token(user_data: SConfirmationData) -> str:
|
def encode_confirmation_token(confirmation_code: str) -> str:
|
||||||
invitation_token = cipher_suite.encrypt(user_data.model_dump_json().encode())
|
invitation_token = cipher_suite.encrypt(confirmation_code.encode())
|
||||||
return invitation_token.decode()
|
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_code = invitation_token.encode()
|
||||||
user_data = cipher_suite.decrypt(user_code)
|
confirmation_code = cipher_suite.decrypt(user_code).decode()
|
||||||
return SConfirmationData.model_validate_json(user_data)
|
return confirmation_code
|
||||||
|
|
||||||
|
|
||||||
class AuthService:
|
class AuthService:
|
||||||
|
|
Loading…
Add table
Reference in a new issue