fix: allow dev guest to switch to authenticated account

This commit is contained in:
Luftmensch
2026-09-03 16:48:05 +07:00
parent 680a23b3fb
commit aeba055e43
3 changed files with 22 additions and 3 deletions
+4
View File
@@ -189,7 +189,11 @@
<span class="header-user-role">{{ user_info.role|upper }} {% if user_info.unit_name %} | {{ user_info.unit_name }}{% endif %}</span> <span class="header-user-role">{{ user_info.role|upper }} {% if user_info.unit_name %} | {{ user_info.unit_name }}{% endif %}</span>
{% endif %} {% endif %}
</div> </div>
{% if user_info.role == 'dev_guest' %}
<a href="{{ url_for('login') }}" class="header-action-btn">🔐 Đăng nhập Admin/Analyzer</a>
{% else %}
<a href="{{ url_for('logout') }}" class="header-action-btn">🚪 Đăng xuất</a> <a href="{{ url_for('logout') }}" class="header-action-btn">🚪 Đăng xuất</a>
{% endif %}
{% else %} {% else %}
<div class="header-guest"> <div class="header-guest">
👤 Khách 👤 Khách
+3 -3
View File
@@ -845,9 +845,9 @@ def get_current_user(credentials: HTTPBasicCredentials = Depends(security)) -> O
@app.get("/login", response_class=HTMLResponse, name="login") @app.get("/login", response_class=HTMLResponse, name="login")
async def login_page(request: Request, next: str = "/"): async def login_page(request: Request, next: str = "/"):
"""Trang đăng nhập — nếu đã login rồi thì redirect ngay""" """Trang đăng nhập; dev_guest vẫn được phép chuyển sang tài khoản thật."""
# Nếu đã đăng nhập thì không cần vào trang login nữa current_user = get_session_user(request)
if get_session_user(request): if current_user and current_user.get("role") != "dev_guest":
return RedirectResponse(url=next, status_code=303) return RedirectResponse(url=next, status_code=303)
return templates.TemplateResponse( return templates.TemplateResponse(
"login.html", "login.html",
+15
View File
@@ -0,0 +1,15 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
APP = (ROOT / "app" / "web_app_fastapi.py").read_text(encoding="utf-8")
HEADER = (ROOT / "app" / "templates" / "header.html").read_text(encoding="utf-8")
def test_dev_guest_is_allowed_to_open_login_page():
assert 'current_user.get("role") != "dev_guest"' in APP
def test_dev_guest_header_offers_real_login_instead_of_logout():
assert "user_info.role == 'dev_guest'" in HEADER
assert "url_for('login')" in HEADER