Đăng Ký Người Dùng
Mô Tả Tổng Quan
Tính năng đăng ký người dùng cho phép người dùng mới tạo tài khoản trong hệ thống bằng cách sử dụng đăng ký dựa trên email tiêu chuẩn. Hệ thống xác thực dữ liệu người dùng, tạo tài khoản người dùng, gán vai trò mặc định và tùy chọn gửi thông báo chào mừng. Đây là phương thức đăng ký truyền thống không liên quan đến OAuth hoặc xác thực bên thứ ba.
API: User Registration API
Biểu Đồ Hoạt Động
flowchart TD
A[Người dùng gửi đăng ký] --> B[Xác thực email, tên, công ty]
B --> C{Dữ liệu có hợp lệ?}
C -->|Không| D[Trả về lỗi xác thực]
C -->|Có| E[Kiểm tra email trùng lặp]
E --> F{Email có duy nhất?}
F -->|Không| G[Trả về lỗi email trùng lặp]
F -->|Có| H[Tạo tài khoản người dùng]
H --> I[Gán admin]
I --> J[Trả về phản hồi thành công]
style A fill:#e1f5fe
style J fill:#c8e6c9
style D fill:#ffcdd2
style G fill:#ffcdd2
Biểu Đồ Tuần Tự
Luồng Đăng Ký Tiêu Chuẩn
sequenceDiagram
participant Client
participant RegisterController
participant AuthService
participant Database
Note over Client,Database: Luồng Đăng Ký Email Tiêu Chuẩn
rect rgb(200, 255, 200)
Note right of Client: Luồng Thành Công
Client->>RegisterController: POST /api/v1/general/auth/register
Note over Client,RegisterController: {email, name, companyName}
rect rgb(200, 230, 255)
Note right of RegisterController: Xác Thực Đầu Vào
RegisterController->>RegisterController: Xác thực dữ liệu yêu cầu
end
rect rgb(200, 255, 255)
Note right of RegisterController: Logic Nghiệp Vụ
RegisterController->>AuthService: register(email, name, companyName)
AuthService->>Database: Kiểm tra email trùng lặp
Database-->>AuthService: Email có sẵn
AuthService->>Database: Tạo bản ghi người dùng
Database-->>AuthService: Người dùng đã tạo
AuthService->>Database: Gán admin
Database-->>AuthService: Vai trò đã gán
end
AuthService-->>RegisterController: Người dùng tạo thành công
RegisterController->>Client: 201 Created + dữ liệu người dùng
end
rect rgb(255, 200, 200)
Note right of Client: Xử Lý Lỗi
rect rgb(255, 230, 230)
alt Lỗi Xác Thực
RegisterController->>Client: 422 Validation Error
else Email Đã Tồn Tại
Database-->>AuthService: Email tồn tại
AuthService-->>RegisterController: Xung đột email
RegisterController->>Client: 409 Conflict
else Lỗi Cơ Sở Dữ Liệu
Database-->>AuthService: Lỗi cơ sở dữ liệu
AuthService-->>RegisterController: Kết quả lỗi
RegisterController->>Client: 500 Internal Server Error
end
end
end
Các Bước
Bước 1: Gửi Yêu Cầu Đăng Ký
- Mô tả: Người dùng gửi biểu mẫu đăng ký với email, tên và công ty
- Yêu cầu:
POST /api/v1/general/auth/register - Xác thực:
- Xác thực định dạng email
- Xác thực các trường bắt buộc (email, name, companyName)
- Xác thực độ dài tên công ty
Bước 2: Xác Thực Dữ Liệu Đầu Vào
- Mô tả: Hệ thống xác thực tất cả dữ liệu đầu vào
- Hành động:
- Kiểm tra định dạng email bằng quy tắc xác thực Laravel
- Xác thực độ dài và định dạng tên
- Xác thực yêu cầu tên công ty
Bước 3: Kiểm Tra Email Trùng Lặp
- Mô tả: Đảm bảo email chưa được đăng ký
- Hành động:
- Truy vấn cơ sở dữ liệu cho email hiện có
- Trả về lỗi nếu email đã tồn tại
Bước 4: Tạo Tài Khoản Người Dùng
- Mô tả: Tạo bản ghi người dùng mới trong cơ sở dữ liệu
- Hành động:
- Lưu thông tin người dùng
- Tạo định danh người dùng duy nhất
- Lưu dữ liệu người dùng với trạng thái hoạt động
- Đặt
is_first_login = true
Bước 5: Gán Vai Trò Mặc Định
- Mô tả: Gán người dùng vào nhóm mặc định với vai trò phù hợp
- Hành động:
- Tạo bản ghi thành viên nhóm
- Gán admin (nhóm mới)
Bước 6: Trả Về Phản Hồi Thành Công
- Mô tả: Gửi phản hồi thành công đến khách hàng
- Phản hồi:
- Thành công: status
200với dữ liệu người dùng - Bao gồm ID người dùng, tên, email và trạng thái
- Gửi email với link xác thực tới email đăng ký
- Thành công: status
Bảng Và Trường Cơ Sở Dữ Liệu Liên Quan
erDiagram
users {
bigint id PK "Khóa chính"
varchar name "Tên đầy đủ của người dùng"
varchar email UK "Địa chỉ email của người dùng (duy nhất)"
varchar payment_provider_customer_id "ID khách hàng nhà cung cấp thanh toán"
tinyint status "Trạng thái người dùng (1: hoạt động, 0: không hoạt động)"
varchar remember_token "Token ghi nhớ Laravel"
timestamp created_at "Thời gian tạo"
timestamp updated_at "Thời gian cập nhật cuối"
timestamp deleted_at "Thời gian xóa mềm"
boolean is_first_login "Cờ đăng nhập lần đầu"
}
groups {
bigint id PK "Khóa chính"
varchar name "Tên nhóm"
text description "Mô tả nhóm"
bigint created_by FK "Người dùng tạo nhóm"
timestamp created_at "Thời gian tạo"
timestamp updated_at "Thời gian cập nhật cuối"
}
group_members {
bigint id PK "Khóa chính"
bigint group_id FK "ID nhóm"
bigint user_id FK "ID người dùng"
bigint group_role_id FK "ID vai trò trong nhóm"
timestamp created_at "Thời gian tạo"
timestamp updated_at "Thời gian cập nhật cuối"
}
group_roles {
bigint id PK "Khóa chính"
varchar name "Tên vai trò"
text description "Mô tả vai trò"
timestamp created_at "Thời gian tạo"
timestamp updated_at "Thời gian cập nhật cuối"
}
users ||--o{ group_members : "có"
groups ||--o{ group_members : "chứa"
group_roles ||--o{ group_members : "định nghĩa"
users ||--o{ groups : "tạo"
Xử Lý Lỗi
| HTTP Status | Error Code | Mô Tả |
|---|---|---|
| 409 | EMAIL_ALREADY_EXISTS | Địa chỉ email đã được đăng ký |
| 422 | UNPROCESSABLE_ENTITY | Lỗi xác thực trong dữ liệu yêu cầu |
| 500 | INTERNAL_SERVER_ERROR | Lỗi máy chủ trong quá trình đăng ký |
Ghi Chú Bổ Sung
- Chỉ Đăng Ký Tiêu Chuẩn: Endpoint này dành riêng cho đăng ký dựa trên email không có OAuth
- Xác Thực Email: Đảm bảo định dạng email phù hợp và duy nhất
- Thông Tin Công Ty: Cần thiết cho ngữ cảnh kinh doanh và quản lý nhóm
- Vai Trò Mặc Định: Người dùng mới được tự động gán vào nhóm mặc định
- Không Có OAuth: Phương thức đăng ký này không liên quan đến Google, Facebook hoặc các nhà cung cấp OAuth khác
- Quản Lý Trạng Thái: Người dùng mới được tạo với trạng thái hoạt động theo mặc định
- Theo Dõi Đăng Nhập Lần Đầu: Người dùng được đánh dấu
is_first_login = truecho trải nghiệm đăng nhập lần đầu - Bảo Mật: Xác thực dựa trên email tiêu chuẩn với kiểm tra trùng lặp và xác thực dữ liệu