mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2026-03-13 07:49:55 +08:00
Improve generic typing
This commit is contained in:
@@ -5,11 +5,11 @@ from typing import Optional, Sequence
|
||||
from fastapi import Depends, HTTPException, status
|
||||
from makefun import with_signature
|
||||
|
||||
from fastapi_users import models
|
||||
from fastapi_users.authentication.base import BaseAuthentication # noqa: F401
|
||||
from fastapi_users.authentication.cookie import CookieAuthentication # noqa: F401
|
||||
from fastapi_users.authentication.jwt import JWTAuthentication # noqa: F401
|
||||
from fastapi_users.manager import UserManager, UserManagerDependency
|
||||
from fastapi_users.models import BaseUserDB
|
||||
|
||||
INVALID_CHARS_PATTERN = re.compile(r"[^0-9a-zA-Z_]")
|
||||
INVALID_LEADING_CHARS_PATTERN = re.compile(r"^[^a-zA-Z_]+")
|
||||
@@ -43,7 +43,7 @@ class Authenticator:
|
||||
def __init__(
|
||||
self,
|
||||
backends: Sequence[BaseAuthentication],
|
||||
get_user_manager: UserManagerDependency,
|
||||
get_user_manager: UserManagerDependency[models.UD],
|
||||
):
|
||||
self.backends = backends
|
||||
self.get_user_manager = get_user_manager
|
||||
@@ -108,14 +108,14 @@ class Authenticator:
|
||||
async def _authenticate(
|
||||
self,
|
||||
*args,
|
||||
user_manager: UserManager,
|
||||
user_manager: UserManager[models.UD],
|
||||
optional: bool = False,
|
||||
active: bool = False,
|
||||
verified: bool = False,
|
||||
superuser: bool = False,
|
||||
**kwargs
|
||||
) -> Optional[BaseUserDB]:
|
||||
user: Optional[BaseUserDB] = None
|
||||
) -> Optional[models.UD]:
|
||||
user: Optional[models.UD] = None
|
||||
for backend in self.backends:
|
||||
token: str = kwargs[name_to_variable_name(backend.name)]
|
||||
if token:
|
||||
|
||||
@@ -3,8 +3,8 @@ from typing import Any, Generic, Optional, TypeVar
|
||||
from fastapi import Response
|
||||
from fastapi.security.base import SecurityBase
|
||||
|
||||
from fastapi_users import models
|
||||
from fastapi_users.manager import UserManager
|
||||
from fastapi_users.models import BaseUserDB
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
@@ -28,12 +28,12 @@ class BaseAuthentication(Generic[T]):
|
||||
self.logout = logout
|
||||
|
||||
async def __call__(
|
||||
self, credentials: Optional[T], user_manager: UserManager
|
||||
) -> Optional[BaseUserDB]:
|
||||
self, credentials: Optional[T], user_manager: UserManager[models.UD]
|
||||
) -> Optional[models.UD]:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def get_login_response(self, user: BaseUserDB, response: Response) -> Any:
|
||||
async def get_login_response(self, user: models.UD, response: Response) -> Any:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def get_logout_response(self, user: BaseUserDB, response: Response) -> Any:
|
||||
async def get_logout_response(self, user: models.UD, response: Response) -> Any:
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -5,10 +5,10 @@ from fastapi import Response
|
||||
from fastapi.security import APIKeyCookie
|
||||
from pydantic import UUID4
|
||||
|
||||
from fastapi_users import models
|
||||
from fastapi_users.authentication import BaseAuthentication
|
||||
from fastapi_users.jwt import SecretType, decode_jwt, generate_jwt
|
||||
from fastapi_users.manager import UserManager, UserNotExists
|
||||
from fastapi_users.models import BaseUserDB
|
||||
|
||||
|
||||
class CookieAuthentication(BaseAuthentication[str]):
|
||||
@@ -67,8 +67,8 @@ class CookieAuthentication(BaseAuthentication[str]):
|
||||
async def __call__(
|
||||
self,
|
||||
credentials: Optional[str],
|
||||
user_manager: UserManager,
|
||||
) -> Optional[BaseUserDB]:
|
||||
user_manager: UserManager[models.UD],
|
||||
) -> Optional[models.UD]:
|
||||
if credentials is None:
|
||||
return None
|
||||
|
||||
@@ -88,7 +88,7 @@ class CookieAuthentication(BaseAuthentication[str]):
|
||||
except UserNotExists:
|
||||
return None
|
||||
|
||||
async def get_login_response(self, user: BaseUserDB, response: Response) -> Any:
|
||||
async def get_login_response(self, user: models.UD, response: Response) -> Any:
|
||||
token = await self._generate_token(user)
|
||||
response.set_cookie(
|
||||
self.cookie_name,
|
||||
@@ -105,11 +105,11 @@ class CookieAuthentication(BaseAuthentication[str]):
|
||||
# so that FastAPI can terminate it properly
|
||||
return None
|
||||
|
||||
async def get_logout_response(self, user: BaseUserDB, response: Response) -> Any:
|
||||
async def get_logout_response(self, user: models.UD, response: Response) -> Any:
|
||||
response.delete_cookie(
|
||||
self.cookie_name, path=self.cookie_path, domain=self.cookie_domain
|
||||
)
|
||||
|
||||
async def _generate_token(self, user: BaseUserDB) -> str:
|
||||
async def _generate_token(self, user: models.UD) -> str:
|
||||
data = {"user_id": str(user.id), "aud": self.token_audience}
|
||||
return generate_jwt(data, self.secret, self.lifetime_seconds)
|
||||
|
||||
@@ -5,10 +5,10 @@ from fastapi import Response
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from pydantic import UUID4
|
||||
|
||||
from fastapi_users import models
|
||||
from fastapi_users.authentication.base import BaseAuthentication
|
||||
from fastapi_users.jwt import SecretType, decode_jwt, generate_jwt
|
||||
from fastapi_users.manager import UserManager, UserNotExists
|
||||
from fastapi_users.models import BaseUserDB
|
||||
|
||||
|
||||
class JWTAuthentication(BaseAuthentication[str]):
|
||||
@@ -44,8 +44,8 @@ class JWTAuthentication(BaseAuthentication[str]):
|
||||
async def __call__(
|
||||
self,
|
||||
credentials: Optional[str],
|
||||
user_manager: UserManager,
|
||||
) -> Optional[BaseUserDB]:
|
||||
user_manager: UserManager[models.UD],
|
||||
) -> Optional[models.UD]:
|
||||
if credentials is None:
|
||||
return None
|
||||
|
||||
@@ -65,10 +65,10 @@ class JWTAuthentication(BaseAuthentication[str]):
|
||||
except UserNotExists:
|
||||
return None
|
||||
|
||||
async def get_login_response(self, user: BaseUserDB, response: Response) -> Any:
|
||||
async def get_login_response(self, user: models.UD, response: Response) -> Any:
|
||||
token = await self._generate_token(user)
|
||||
return {"access_token": token, "token_type": "bearer"}
|
||||
|
||||
async def _generate_token(self, user: BaseUserDB) -> str:
|
||||
async def _generate_token(self, user: models.UD) -> str:
|
||||
data = {"user_id": str(user.id), "aud": self.token_audience}
|
||||
return generate_jwt(data, self.secret, self.lifetime_seconds)
|
||||
|
||||
Reference in New Issue
Block a user