II. Yêu cầu chức năng — Phía Creator (Influencer)#
1. Đăng nhập bằng Google / TikTok#
Mục tiêu#
Cho phép người dùng đăng nhập bằng tài khoản mạng xã hội, không cần tạo tài khoản thủ công.
Phạm vi#
- Nền tảng: Cổng Influencer (web)
- Hỗ trợ: Google, TikTok
Luồng nghiệp vụ#
- Người dùng chọn phương thức đăng nhập (Google / TikTok).
- Ứng dụng chuyển hướng đến trang xác thực OAuth 2.0 của nền tảng tương ứng.
- Người dùng đăng nhập và cấp quyền truy cập thông tin: email, tên hiển thị, ảnh đại diện.
- Nền tảng trả về Authorization Code → Frontend gửi đến Backend.
- Backend đổi mã lấy Access Token → lấy thông tin người dùng.
- Kiểm tra: nếu người dùng đã tồn tại → đăng nhập; chưa tồn tại → tạo tài khoản mới.
- Backend tạo JWT token, trả phản hồi đăng nhập thành công.
Dữ liệu#
| Trường | Nguồn | Lưu trữ | Ghi chú |
|---|---|---|---|
provider_user_id | OAuth | DB (hash) | Định danh duy nhất |
provider | Hệ thống | DB | google / tiktok |
email | OAuth | DB | Không chia sẻ bên thứ ba |
display_name | OAuth | DB | Cho phép chỉnh sửa |
avatar_url | OAuth | DB | Có thể cập nhật |
access_token | OAuth | Không lưu | Dùng 1 lần rồi hủy |
Bảo mật#
- Không lưu access_token sau khi đăng nhập thành công.
- Tuân thủ Nghị định 13/2023 (VN) và GDPR (EU).
- Mã hóa AES-256 cho OAuth token tạm thời.
Kịch bản lỗi#
| Tình huống | Hành động |
|---|---|
| Từ chối cấp quyền | Hiển thị thông báo, dừng tiến trình |
| Token hết hạn / không hợp lệ | Thông báo "Phiên đăng nhập thất bại" |
| Backend không kết nối OAuth server | Retry tối đa 3 lần → thông báo lỗi |
Tiêu chí chấp nhận (Acceptance Criteria)#
| # | Tiêu chí | Điều kiện đạt |
|---|---|---|
| AC-1.1 | Đăng nhập Google thành công | Chọn Google → hoàn tất OAuth → redirect về trang chủ với trạng thái đã đăng nhập, hiển thị tên + avatar |
| AC-1.2 | Đăng nhập TikTok thành công | Chọn TikTok → hoàn tất OAuth → redirect về trang chủ với trạng thái đã đăng nhập |
| AC-1.3 | Tạo tài khoản mới tự động | Người dùng chưa tồn tại → hệ thống tạo tài khoản mới, lưu provider_user_id, email, display_name, avatar_url |
| AC-1.4 | Đăng nhập lại tài khoản đã tồn tại | Người dùng đã có tài khoản → đăng nhập trực tiếp, không tạo trùng |
| AC-1.5 | Từ chối cấp quyền | Người dùng từ chối trên trang OAuth → hiển thị thông báo lỗi, không tạo tài khoản |
| AC-1.6 | Access token không lưu | Sau đăng nhập thành công, access_token OAuth không tồn tại trong DB |
| AC-1.7 | JWT token hợp lệ | Response trả về JWT token, sử dụng được cho các API tiếp theo |