# Cơ chế Xác thực (JWT & PostgreSQL)

Hệ thống xác thực của Canifa AI Admin Console được thiết kế dựa trên JSON Web Token (JWT) để duy trì phiên đăng nhập và xác thực phía server với FastAPI.

## Flow xác thực (Logic Flow)

```mermaid
sequenceDiagram
    participant User as Người Dùng
    participant Browser as Trình duyệt (auth.js)
    participant API as FastAPI Backend
    participant DB as PostgreSQL (admin_users)

    User->>Browser: Nhập Username & Password
    Browser->>API: POST /api/auth/login
    API->>DB: Lấy User & Phash (SELECT username, password)
    DB-->>API: Trả về kết quả
    API->>API: Kiểm tra Mật khẩu (verify_password)
    API->>DB: Cập nhật `last_login = NOW()`
    API-->>Browser: Trả về {access_token, user_info}
    Browser->>Browser: Lưu token vào `localStorage`
    Browser->>Browser: Redirect tới main.html
```

## Các module cốt lõi

1. **Frontend Auth Guard (`backend/static/auth.js`)**: 
   - Đóng vai trò là file script bảo vệ chung (Guard). Mọi trang nội bộ phải import `auth.js`.
   - Hàm `canifaAuth.guard()` và `canifaAuth.guardAdmin()` kiểm tra xem token và user_info có tồn tại trong `localStorage` hay không.
   - Hàm `canifaAuth.authHeaders(extra)` tự động thêm Header `Authorization: Bearer <token>` vào các request `fetch()`.
   - Tính năng "Linh Hoạt": Có thể bypass auth qua parameter `?noauth=1` hoặc localStorage `canifa_auth_disabled` để test cục bộ.

2. **Backend FastAPI Dependency (`backend/auth/middleware.py`)**: 
   - Hàm `get_current_user` trích xuất JWT từ Header `Authorization`.
   - Sau khi decode token qua thuật toán, middleware truy vấn trực tiếp vào Postgres table `admin_users` qua schema `DASHBOARD_SCHEMA` để kiểm tra quyền và lấy cấu hình cá nhân của User (vd. `codex_token`, `openai_key`).
   - Có cơ chế Role-Based Access Control (RBAC) với các hàm như `require_admin` và `require_editor_or_admin`.