mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
Move on_after_register to manager
This commit is contained in:
@@ -64,21 +64,12 @@ class FastAPIUsers(Generic[models.U, models.UC, models.UU, models.UD]):
|
||||
self.get_user_manager = get_user_manager
|
||||
self.current_user = self.authenticator.current_user
|
||||
|
||||
def get_register_router(
|
||||
self,
|
||||
after_register: Optional[Callable[[models.UD, Request], None]] = None,
|
||||
) -> APIRouter:
|
||||
"""
|
||||
Return a router with a register route.
|
||||
|
||||
:param after_register: Optional function called
|
||||
after a successful registration.
|
||||
"""
|
||||
def get_register_router(self) -> APIRouter:
|
||||
"""Return a router with a register route."""
|
||||
return get_register_router(
|
||||
self.get_user_manager,
|
||||
self._user_model,
|
||||
self._user_create_model,
|
||||
after_register,
|
||||
)
|
||||
|
||||
def get_verify_router(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from typing import Any, Callable, Dict, Generic, Optional, Type, Union
|
||||
|
||||
from pydantic.types import UUID4
|
||||
|
||||
from fastapi import Request
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from pydantic.types import UUID4
|
||||
|
||||
from fastapi_users import models, password
|
||||
from fastapi_users.db import BaseUserDatabase
|
||||
@@ -67,7 +67,9 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
|
||||
return user
|
||||
|
||||
async def create(self, user: models.UC, safe: bool = False) -> models.UD:
|
||||
async def create(
|
||||
self, user: models.UC, safe: bool = False, request: Optional[Request] = None
|
||||
) -> models.UD:
|
||||
await self.validate_password(user.password, user)
|
||||
|
||||
existing_user = await self.user_db.get_by_email(user.email)
|
||||
@@ -79,7 +81,12 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
user.create_update_dict() if safe else user.create_update_dict_superuser()
|
||||
)
|
||||
db_user = self.user_db_model(**user_dict, hashed_password=hashed_password)
|
||||
return await self.user_db.create(db_user)
|
||||
|
||||
created_user = await self.user_db.create(db_user)
|
||||
|
||||
await self.on_after_register(created_user, request)
|
||||
|
||||
return created_user
|
||||
|
||||
async def verify(self, user: models.UD) -> models.UD:
|
||||
if user.is_verified:
|
||||
@@ -105,6 +112,11 @@ class BaseUserManager(Generic[models.UC, models.UD]):
|
||||
) -> None:
|
||||
return # pragma: no cover
|
||||
|
||||
async def on_after_register(
|
||||
self, user: models.UD, request: Optional[Request] = None
|
||||
) -> None:
|
||||
return # pragma: no cover
|
||||
|
||||
async def authenticate(
|
||||
self, credentials: OAuth2PasswordRequestForm
|
||||
) -> Optional[models.UD]:
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
from typing import Callable, Optional, Type
|
||||
from typing import Type
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
|
||||
from fastapi_users import models
|
||||
from fastapi_users.manager import (
|
||||
BaseUserManager,
|
||||
InvalidPasswordException,
|
||||
UserAlreadyExists,
|
||||
BaseUserManager,
|
||||
UserManagerDependency,
|
||||
)
|
||||
from fastapi_users.router.common import ErrorCode, run_handler
|
||||
from fastapi_users.router.common import ErrorCode
|
||||
|
||||
|
||||
def get_register_router(
|
||||
get_user_manager: UserManagerDependency[models.UC, models.UD],
|
||||
user_model: Type[models.U],
|
||||
user_create_model: Type[models.UC],
|
||||
after_register: Optional[Callable[[models.UD, Request], None]] = None,
|
||||
) -> APIRouter:
|
||||
"""Generate a router with the register route."""
|
||||
router = APIRouter()
|
||||
@@ -30,7 +29,7 @@ def get_register_router(
|
||||
user_manager: BaseUserManager[models.UC, models.UD] = Depends(get_user_manager),
|
||||
):
|
||||
try:
|
||||
created_user = await user_manager.create(user, safe=True)
|
||||
created_user = await user_manager.create(user, safe=True, request=request)
|
||||
except UserAlreadyExists:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
@@ -45,9 +44,6 @@ def get_register_router(
|
||||
},
|
||||
)
|
||||
|
||||
if after_register:
|
||||
await run_handler(after_register, created_user, request)
|
||||
|
||||
return created_user
|
||||
|
||||
return router
|
||||
|
||||
@@ -7,8 +7,8 @@ from pydantic import UUID4, EmailStr
|
||||
from fastapi_users import models
|
||||
from fastapi_users.jwt import SecretType, decode_jwt, generate_jwt
|
||||
from fastapi_users.manager import (
|
||||
InvalidPasswordException,
|
||||
BaseUserManager,
|
||||
InvalidPasswordException,
|
||||
UserManagerDependency,
|
||||
UserNotExists,
|
||||
)
|
||||
|
||||
@@ -6,9 +6,9 @@ from pydantic import UUID4
|
||||
from fastapi_users import models
|
||||
from fastapi_users.authentication import Authenticator
|
||||
from fastapi_users.manager import (
|
||||
BaseUserManager,
|
||||
InvalidPasswordException,
|
||||
UserAlreadyExists,
|
||||
BaseUserManager,
|
||||
UserManagerDependency,
|
||||
UserNotExists,
|
||||
)
|
||||
|
||||
@@ -7,8 +7,8 @@ from pydantic import UUID4, EmailStr
|
||||
from fastapi_users import models
|
||||
from fastapi_users.jwt import SecretType, decode_jwt, generate_jwt
|
||||
from fastapi_users.manager import (
|
||||
UserAlreadyVerified,
|
||||
BaseUserManager,
|
||||
UserAlreadyVerified,
|
||||
UserManagerDependency,
|
||||
UserNotExists,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user