Fixed login redirecting issues

This commit is contained in:
2025-11-21 23:38:03 +01:00
parent 2532a977c1
commit 608fa8b95c
5 changed files with 402 additions and 23 deletions

View File

@@ -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}