Fixed login redirecting issues
This commit is contained in:
@@ -27,8 +27,13 @@ from fastapi import APIRouter, Request, Depends, Path
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import Optional
|
||||
|
||||
from app.api.deps import get_current_admin_from_cookie_or_header, get_db
|
||||
from app.api.deps import (
|
||||
get_current_admin_from_cookie_or_header,
|
||||
get_current_admin_optional,
|
||||
get_db
|
||||
)
|
||||
from models.database.user import User
|
||||
|
||||
router = APIRouter()
|
||||
@@ -40,23 +45,37 @@ templates = Jinja2Templates(directory="app/templates")
|
||||
# ============================================================================
|
||||
|
||||
@router.get("/", response_class=RedirectResponse, include_in_schema=False)
|
||||
async def admin_root():
|
||||
async def admin_root(
|
||||
current_user: Optional[User] = Depends(get_current_admin_optional)
|
||||
):
|
||||
"""
|
||||
Redirect /admin/ to /admin/login.
|
||||
Redirect /admin/ based on authentication status.
|
||||
|
||||
Simple approach:
|
||||
- Unauthenticated users → see login form
|
||||
- Authenticated users → login page shows form (they can navigate to dashboard)
|
||||
- Authenticated admin users → /admin/dashboard
|
||||
- Unauthenticated users → /admin/login
|
||||
"""
|
||||
if current_user:
|
||||
# User is already logged in as admin, redirect to dashboard
|
||||
return RedirectResponse(url="/admin/dashboard", status_code=302)
|
||||
|
||||
return RedirectResponse(url="/admin/login", status_code=302)
|
||||
|
||||
|
||||
@router.get("/login", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def admin_login_page(request: Request):
|
||||
async def admin_login_page(
|
||||
request: Request,
|
||||
current_user: Optional[User] = Depends(get_current_admin_optional)
|
||||
):
|
||||
"""
|
||||
Render admin login page.
|
||||
No authentication required.
|
||||
|
||||
If user is already authenticated as admin, redirect to dashboard.
|
||||
Otherwise, show login form.
|
||||
"""
|
||||
if current_user:
|
||||
# User is already logged in as admin, redirect to dashboard
|
||||
return RedirectResponse(url="/admin/dashboard", status_code=302)
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"admin/login.html",
|
||||
{"request": request}
|
||||
|
||||
Reference in New Issue
Block a user