mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
* Names for urls added * Tests for Login/Logout Names * Register Name Test * tests/test_router_reset.py * Tests to verify url names in users router * Test Verify Router Names * oauth routes updated with prefix * Test for authorize. Didn't right test for callback as covered under other tests
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
from fastapi import APIRouter, Body, Depends, HTTPException, Request, status
|
|
from pydantic import EmailStr
|
|
|
|
from fastapi_users import models
|
|
from fastapi_users.manager import (
|
|
BaseUserManager,
|
|
InvalidPasswordException,
|
|
InvalidResetPasswordToken,
|
|
UserInactive,
|
|
UserManagerDependency,
|
|
UserNotExists,
|
|
)
|
|
from fastapi_users.router.common import ErrorCode
|
|
|
|
|
|
def get_reset_password_router(
|
|
get_user_manager: UserManagerDependency[models.UC, models.UD]
|
|
) -> APIRouter:
|
|
"""Generate a router with the reset password routes."""
|
|
router = APIRouter()
|
|
|
|
@router.post("/forgot-password", status_code=status.HTTP_202_ACCEPTED, name="reset:forgot_password")
|
|
async def forgot_password(
|
|
request: Request,
|
|
email: EmailStr = Body(..., embed=True),
|
|
user_manager: BaseUserManager[models.UC, models.UD] = Depends(get_user_manager),
|
|
):
|
|
try:
|
|
user = await user_manager.get_by_email(email)
|
|
except UserNotExists:
|
|
return None
|
|
|
|
try:
|
|
await user_manager.forgot_password(user, request)
|
|
except UserInactive:
|
|
pass
|
|
|
|
return None
|
|
|
|
@router.post("/reset-password", name="reset:reset_password")
|
|
async def reset_password(
|
|
request: Request,
|
|
token: str = Body(...),
|
|
password: str = Body(...),
|
|
user_manager: BaseUserManager[models.UC, models.UD] = Depends(get_user_manager),
|
|
):
|
|
try:
|
|
await user_manager.reset_password(token, password, request)
|
|
except (InvalidResetPasswordToken, UserNotExists, UserInactive):
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=ErrorCode.RESET_PASSWORD_BAD_TOKEN,
|
|
)
|
|
except InvalidPasswordException as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail={
|
|
"code": ErrorCode.RESET_PASSWORD_INVALID_PASSWORD,
|
|
"reason": e.reason,
|
|
},
|
|
)
|
|
|
|
return router
|