Là một Quản trị viên hệ thống (Central Admin), Tôi muốn đăng nhập vào hệ thống CRM bằng tài khoản Admin được cấp sẵn, Để tôi có thể thực hiện các nghiệp vụ quản trị Master Data, xét duyệt đối tác và theo dõi toàn bộ hệ thống.
Điều kiện tiên quyết (Prerequisites)
- Tài khoản Admin phải tồn tại trong cơ sở dữ liệu (thông qua script khởi tạo hoặc do Super Admin tạo trước đó).
- Tài khoản phải được gán vai trò (Role) là Admin hoặc Super Admin.
- Mật khẩu trong cơ sở dữ liệu phải được mã hóa bằng thuật toán Bcrypt (có sử dụng Salt).
- Hệ thống Backend đã cấu hình sẵn cơ chế tạo mã định danh JWT (JSON Web Token).
Quy trình đăng nhập chuẩn
- Tại trang đăng nhập, người dùng cung cấp các thông tin: Email và Mật khẩu.
- Sau khi nhấn “Đăng nhập”, hệ thống thực hiện kiểm tra tính hợp lệ của thông tin:
- So sánh mật khẩu nhập vào với bản Hash trong DB.
- Kiểm tra vai trò của người dùng.
- Khi thông tin chính xác và có quyền Admin, hệ thống phản hồi mã Token (JWT) chứa thông tin định danh cơ bản.
- Hệ thống tự động chuyển hướng người dùng vào trang Dashboard (Tổng quan) của CRM Admin.
Kiểm tra tính hợp lệ và Thông báo lỗi (Validation & Error Handling)
- Sai thông tin đăng nhập: Nếu Email không tồn tại hoặc mật khẩu không khớp, hệ thống hiển thị thông báo: “Email hoặc mật khẩu không chính xác.” (Không chỉ rõ sai trường nào để đảm bảo bảo mật).
- Kiểm tra quyền truy cập: Nếu tài khoản hợp lệ nhưng không có Role Admin, hệ thống từ chối truy cập và thông báo: “Bạn không có quyền truy cập vào hệ thống này.”
- Trạng thái tài khoản: Nếu tài khoản đang ở trạng thái Inactive (Ngừng hoạt động) hoặc Locked (Bị khóa), hệ thống thông báo: “Tài khoản của bạn hiện đang bị khóa. Vui lòng liên hệ bộ phận hỗ trợ.”
Bảo mật và Quản lý phiên (Security & Session Management)
- Quản lý Token: JWT Token sau khi cấp phải được lưu trữ an toàn trong Cookie với thuộc tính HttpOnly và Secure để ngăn chặn các cuộc tấn công XSS.
- Cơ chế Rate Limit (Chống Brute Force):
- Hệ thống cho phép nhập sai mật khẩu tối đa 5 lần trong vòng 1 phút.
- Nếu vượt quá giới hạn, hệ thống tạm khóa chức năng đăng nhập của tài khoản đó trong 1 phút và hiển thị thông báo: “Bạn đã nhập sai quá nhiều lần. Vui lòng thử lại sau 1 phút.”
Giao diện và Trải nghiệm người dùng (UI/UX)
- Các trường nhập liệu phải có validation cơ bản (Email đúng định dạng, Mật khẩu không được để trống).
- Trường mật khẩu phải có chức năng “Ẩn/Hiện” (mắt xem mật khẩu) để người dùng kiểm tra lại thông tin nhập.
- Trong quá trình xử lý đăng nhập, hệ thống phải hiển thị trạng thái loading (spinner) để người dùng không thao tác lặp lại.