OVIRO LogoOVIRO
HRMNhân viên

Đăng nhập

Xác thực và đăng nhập vào hệ thống thông qua quy trình 2 bước.

Bước 1: Khởi tạo đăng nhập (authenticateInit)

Xác thực email/password và lấy danh sách các công ty mà người dùng tham gia.

Endpoint: POST /v1/users/authenticateinit

Body Parameters:

TênKiểuBắt buộcMô tả
emailstringEmail người dùng
passwordstringMật khẩu
sourcestringNguồn đăng nhập (mặc định: frontend)

Response Schema:

{
  "total": 2,
  "limit": 20,
  "currentpage": 1,
  "items": [
    {
      "id": 101,
      "user_id": 1,
      "company": {
        "id": 10311,
        "name": "Công ty TNHH Phần Mềm Xanh",
        "domain": "phanmemxanh",
        "status": 1,
        "date_created": 1609459200
      },
      "employee": {
        "id": 101,
        "user_id": 1,
        "company_id": 10311,
        "full_name": "Nguyễn Văn A",
        "email": "[email protected]",
        "phone": "0987654321",
        "status": 1
      }
    },
    {
      "id": 205,
      "user_id": 1,
      "company": {
        "id": 10500,
        "name": "Chi nhánh Hà Nội",
        "domain": "pmx-hanoi",
        "status": 1,
        "date_created": 1640995200
      },
      "employee": {
        "id": 205,
        "user_id": 1,
        "company_id": 10500,
        "full_name": "Nguyễn Văn A",
        "email": "[email protected]",
        "phone": "0987654321",
        "status": 1
      }
    }
  ]
}

Lưu ý:

  • Nếu người dùng chỉ thuộc 1 công ty, có thể skip sang bước 2 tự động
  • Email sẽ được chuyển về lowercase trước khi xử lý

Bước 2: Hoàn tất đăng nhập (authenticateFinish)

Xác thực và lấy JWT token cho công ty đã chọn.

Endpoint: POST /v1/users/authenticatefinish

Body Parameters:

TênKiểuBắt buộcMô tả
emailstringEmail người dùng
passwordstringMật khẩu
company_idintID công ty (từ bước 1)
sourcestringNguồn đăng nhập (mặc định: frontend)

Response Schema:

{
  "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refresh_token": "a1b2c3d4e5f6...",
  "id": 1,
  "email": "[email protected]",
  "full_name": "Nguyễn Văn A",
  "role": "admin,editor,inventory",
  "company": {
    "id": 10311,
    "name": "Công ty TNHH Phần Mềm Xanh",
    "domain": "phanmemxanh",
    "status": 1,
    "date_created": 1609459200
  },
  "employee": {
    "id": 101,
    "user_id": 1,
    "company_id": 10311,
    "full_name": "Nguyễn Văn A",
    "email": "[email protected]",
    "phone": "0987654321",
    "status": 1
  },
  "company_list": [
    {
      "id": 101,
      "user_id": 1,
      "company": { "id": 10311, "name": "Công ty TNHH Phần Mềm Xanh", ... },
      "employee": { ... }
    }
  ]
}

Response Fields:

FieldMô tả
jwtJWT token để sử dụng cho các request tiếp theo
refresh_tokenRefresh token để làm mới JWT khi hết hạn
idUser ID
emailEmail người dùng
full_nameTên đầy đủ của nhân viên trong công ty
roleDanh sách quyền (phân cách bằng dấu phẩy)
companyThông tin công ty đang đăng nhập
employeeThông tin nhân viên trong công ty
company_listDanh sách tất cả công ty người dùng tham gia

Error Codes

HTTPCodeMô tả
401error_employee_not_foundKhông tìm thấy thông tin nhân viên
422error_email_requiredThiếu thông tin email
422error_email_format_invalidĐịnh dạng email không hợp lệ
422error_password_emptyThiếu mật khẩu
422error_account_not_foundTài khoản không tồn tại
422error_account_invalidMật khẩu không chính xác
422error_company_id_not_foundKhông tìm thấy ID công ty
422error_employee_with_email_not_foundEmail không thuộc nhân viên của công ty này
500error_session_can_not_be_savedLỗi tạo phiên làm việc

Sử dụng JWT Token

Sau khi đăng nhập thành công, sử dụng JWT token trong header của các request tiếp theo:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

On this page