Đăng nhập
Xác thực khách hàng bằng số điện thoại và mật khẩu.
Endpoint
POST /site/customers/authenticate
Headers
| Key | Value | Bắt buộc | Mô tả |
|---|---|---|---|
SiteTenantId | {tenant_id} | Có | ID của công ty/tenant. |
Workflow & Logic
API này xử lý việc đăng nhập của khách hàng. Hệ thống hỗ trợ cả xác thực nội bộ và xác thực thông qua Remote API (SSO).
Quy trình xử lý
-
Khởi tạo Site: Kiểm tra Tenant và thông tin Site hợp lệ.
-
Xác thực thông tin:
- Kiểm tra số điện thoại (phone) có đúng định dạng không.
- Tìm kiếm khách hàng theo
phone(khớp chính xác) trong shop hiện tại (SiteTenantId). Khách hàng của shop khác không đăng nhập được vào shop này.
-
Xác thực mật khẩu:
- Nếu sử dụng
internalauth: So khớp mật khẩu đã hash. - Nếu sử dụng
remote_apiauth (shop cấu hình đăng nhập qua hệ thống tài khoản riêng của shop): Gọi API bên thứ ba để xác thực. Nếu thành công và khách hàng chưa tồn tại local, hệ thống sẽ tự động tạo bản ghi khách hàng local (Just-in-time provisioning).
- Nếu sử dụng
-
Xử lý dữ liệu bổ sung:
- Nếu khách hàng chưa có chính sách giá (
price_policy_id = 0), hệ thống sẽ lấy chính sách giá mặc định của loại khách hàng đó (customer_type).
- Nếu khách hàng chưa có chính sách giá (
-
Tạo phiên đăng nhập: Nếu xác thực thành công, hệ thống tạo phiên đăng nhập (JWT gắn với khách hàng và shop), có hiệu lực 7 ngày.
-
Trả về token: Trường
jwttrong response là mã định danh phiên (chuỗi 32 ký tự), không phải chuỗi JWT đầy đủ. Frontend gửi nguyên giá trị này trong headerSiteAuthorizationở các request tiếp theo, kèm đúngSiteTenantIdcủa shop đã đăng nhập.
Token gắn với shop
Token chỉ dùng được với đúng shop (SiteTenantId) đã đăng nhập. Gửi token của shop A khi gọi shop B: các API yêu cầu đăng nhập trả HTTP 401 error_customer_company_mismatch; các API công khai coi như khách chưa đăng nhập.
Request Body
{
"phone": "0987654321",
"password": "mật_khẩu_của_bạn"
}| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
phone | string | Có | Số điện thoại đăng nhập (chỉ gồm chữ số). |
password | string | Có | Mật khẩu. |
Response Schema
HTTP 200 - Thành công
Trả về mã JWT và thông tin cơ bản của khách hàng.
{
"jwt": "5f2b8c9d0e1a4b3c6d7e8f9012345678",
"user": {
"id": 123,
"full_name": "Nguyễn Văn A",
"phone": "0987654321",
"price_policy_id": 1,
// ... các trường khác trong Customer Object
},
"auth_mode": "internal"
}HTTP 422 - Lỗi dữ liệu
| Mã lỗi | Mô tả |
|---|---|
error_phone_required | Số điện thoại không được để trống. |
error_phone_invalid | Số điện thoại sai định dạng. |
error_account_not_found | Tài khoản không tồn tại. |
error_password_empty | Mật khẩu không được để trống. |
error_account_invalid | Số điện thoại hoặc mật khẩu không chính xác. |
error_remote_auth_failed | (Chế độ remote_api) Hệ thống tài khoản của shop từ chối đăng nhập. |
HTTP 500 - Lỗi hệ thống
| Mã lỗi | Mô tả |
|---|---|
error_session_can_not_be_saved | Không tạo được phiên đăng nhập. |
error_add_user | (Chế độ remote_api) Không tạo được bản ghi khách hàng local. |
Trường auth_mode
| Giá trị | Mô tả |
|---|---|
internal | Xác thực bằng tài khoản khách hàng lưu trong Hubport. |
remote_api | Xác thực qua hệ thống tài khoản riêng của shop. |