Код: Выделить всё
@auth_router.patch('/change-password', response_model=UserSchema)
async def change_password(change_password_schema: ChangePasswordSchema, db: Annotated[AsyncSession, Depends(get_db)],
user: Annotated[User, Depends(current_user)]):
return await auth.change_password(change_password_schema=change_password_schema, db=db, user=user)
Код: Выделить всё
async def change_password(change_password_schema: ChangePasswordSchema,
db: Annotated[AsyncSession, Depends(get_db)],
user: User):
password_match = verify_password(change_password_schema.current_password, user.password)
if not password_match:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST,
detail="Current password doesn't match.")
user.password = get_password_hash(change_password_schema.new_password)
if user.first_login:
user.first_login = False
db.add(user)
await db.commit()
await db.refresh(user)
return user
Код: Выделить всё
class ChangePasswordSchema(BaseModel):
current_password: str
new_password: str
@model_validator(mode='after')
def validate_password(self):
if self.new_password == self.current_password:
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="New password can't be same as old password")
try:
validate_password(self.new_password)
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=str(e))
return self
Подробнее здесь: https://stackoverflow.com/questions/793 ... n-password
Мобильная версия