🐛 Fix maybe_authenticated
This commit is contained in:
parent
de043ddd97
commit
a45f03b92f
1 changed files with 21 additions and 5 deletions
|
|
@ -2,14 +2,16 @@ import time
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
import jwt
|
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Request, status
|
||||||
import settings
|
from fastapi.security import OAuth2, OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
||||||
from fastapi import APIRouter, Body, Depends, Header, HTTPException, status
|
from fastapi.security.utils import get_authorization_scheme_param
|
||||||
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ohmyapi.builtin.auth.models import Group, User
|
from ohmyapi.builtin.auth.models import Group, User
|
||||||
|
|
||||||
|
import jwt
|
||||||
|
import settings
|
||||||
|
|
||||||
# Router
|
# Router
|
||||||
router = APIRouter(prefix="/auth", tags=["Auth"])
|
router = APIRouter(prefix="/auth", tags=["Auth"])
|
||||||
|
|
||||||
|
|
@ -23,7 +25,21 @@ REFRESH_TOKEN_EXPIRE_SECONDS = getattr(
|
||||||
settings, "JWT_REFRESH_TOKEN_EXPIRE_SECONDS", 7 * 24 * 60 * 60
|
settings, "JWT_REFRESH_TOKEN_EXPIRE_SECONDS", 7 * 24 * 60 * 60
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class OptionalOAuth2PasswordBearer(OAuth2):
|
||||||
|
def __init__(self, tokenUrl: str):
|
||||||
|
super().__init__(flows={"password": {"tokenUrl": tokenUrl}}, scheme_name="OAuth2PasswordBearer")
|
||||||
|
|
||||||
|
async def __call__(self, request: Request) -> Optional[str]:
|
||||||
|
authorization: str = request.headers.get("Authorization")
|
||||||
|
scheme, param = get_authorization_scheme_param(authorization)
|
||||||
|
if not authorization or scheme.lower() != "bearer":
|
||||||
|
# No token provided — just return None
|
||||||
|
return None
|
||||||
|
return param
|
||||||
|
|
||||||
|
|
||||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login")
|
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login")
|
||||||
|
oauth2_optional_scheme = OptionalOAuth2PasswordBearer(tokenUrl="/auth/login")
|
||||||
|
|
||||||
|
|
||||||
class ClaimsUser(BaseModel):
|
class ClaimsUser(BaseModel):
|
||||||
|
|
@ -122,7 +138,7 @@ async def get_current_user(token: str = Depends(oauth2_scheme)) -> User:
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
async def maybe_authenticated(token: Optional[str] = Depends(oauth2_scheme)) -> Optional[User]:
|
async def maybe_authenticated(token: Optional[str] = Depends(oauth2_optional_scheme)) -> Optional[User]:
|
||||||
if token is None:
|
if token is None:
|
||||||
return None
|
return None
|
||||||
return await get_current_user(token)
|
return await get_current_user(token)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue