Giao thức CLV1 đã công khaiĐọc đặc tả
Mục lục thư viện

Thư viện tài liệuBản quyền

Người dùng cuối

Người dùng cuối là tài khoản (tên đăng nhập và mật khẩu) mà khách hàng dùng để đăng nhập vào phần mềm của bạn. Mỗi tài khoản thuộc một ứng dụng và gắn với một license; bạn thêm, tìm, cấm, đặt lại mật khẩu hoặc xoá chúng ngay trong dashboard.

8 phút đọc

Khi nào ứng dụng có người dùng cuối

Tài khoản chỉ dùng được khi ứng dụng chạy chế độ đăng nhập Tài khoản hoặc Tài khoản + license key. Bạn chọn chế độ ở Phát hành & bản quyền › Đăng nhập & gói license, thẻ Chế độ đăng nhập. Ở chế độ License key, phần mềm chỉ dùng activate(key) và trial(), còn register() và login() bị từ chối với mã mode_not_allowed. Chi tiết từng chế độ nằm trong Chế độ đăng nhập và dùng thử.

Vài quy tắc nền:

  • Tên đăng nhập là duy nhất trong một ứng dụng, dài từ 3 đến 64 ký tự, chỉ gồm chữ cái không dấu, chữ số, dấu chấm, gạch ngang và gạch dưới. Khi đăng nhập, tên được so khớp chính xác, có phân biệt hoa thường.
  • Mật khẩu dài từ 8 đến 128 ký tự và chỉ được lưu dưới dạng hash Argon2id.
  • Thời hạn, số máy và quyền tính năng đến từ license mà tài khoản liên kết, không đến từ tài khoản.

Tài khoản đến từ đâu

NguồnLicense của tài khoản
Phần mềm gọi register() kèm keyLicense của key đó
Phần mềm gọi register() không kèm keyMột license tự tạo theo gói mặc định, hiện trong danh sách License với dạng ACCT-…
Bạn bấm Thêm người dùng trong dashboardKey bạn nhập, hoặc không có license nếu bỏ trống
Seller API (POST /apps/{appId}/users, quyền users:write)Như dashboard

Gói mặc định là gói bật tuỳ chọn Gói mặc định cho key mới và tài khoản miễn phí ở Đăng nhập & gói license. Nếu ứng dụng chưa có gói mặc định, license tự tạo không có thời hạn, cho 1 máy và không có quyền tính năng nào.

Xem và tìm người dùng

Mở Người dùng cuối › Người dùng (hoặc gõ G rồi U khi đang ở trong một ứng dụng). Bảng có các cột Tên đăng nhập, Trạng thái (Đang dùng hoặc Bị cấm), Email, Đăng nhập gần nhất và Ngày tạo, người mới nhất ở trên. Ô Tìm người dùng… khớp một phần tên đăng nhập hoặc email, không phân biệt hoa thường. Mỗi lần tải 50 dòng, bấm Tải cũ hơn để xem tiếp.

Muốn biết một key đang thuộc tài khoản nào, mở license đó ở Phát hành & bản quyền › License: mục Người dùng liên kết liệt kê tên đăng nhập và lần đăng nhập gần nhất.

Thêm người dùng từ dashboard

  1. Vào Người dùng cuối › Người dùng, bấm Thêm người dùng.
  2. Nhập Tên đăng nhập và Mật khẩu (ít nhất 8 ký tự).
  3. Email không bắt buộc.
  4. Ở License key, dán một key có sẵn của chính ứng dụng này nếu bạn muốn tài khoản dùng được ngay.
  5. Bấm Tạo.

Hộp thoại báo lỗi khi tên đã có (Username already taken), khi key không thuộc ứng dụng (License key not found in this app) hoặc khi chạm hạn mức của gói (Your plan allows … end users). Tài khoản mới hiện Chưa bao giờ ở cột Đăng nhập gần nhất cho tới lần đăng nhập đầu tiên.

Liên kết với license

Từ phía phần mềm, mỗi license chỉ gắn với một tài khoản: đăng ký hoặc nâng cấp bằng key đã có chủ trả về license_already_registered. Nếu key chưa từng dùng, thời hạn bắt đầu tính từ lần đăng ký hoặc đăng nhập đầu tiên.

Ở chế độ Tài khoản + license key, người dùng đăng ký miễn phí rồi nhập key để nâng cấp bằng redeem(key). Tài khoản giữ nguyên tên, mật khẩu và máy đang dùng, chuyển sang license mới; phiên cũ kết thúc và phần mềm nhận phiên mới. License miễn phí tự tạo trước đó bị thu hồi, còn nếu trước đó là một key thật thì key đó được giữ nguyên. Nhập lại chính key đang dùng trả về already_redeemed.

Dashboard hiện không có thao tác đổi tên đăng nhập, email hay license của một tài khoản đã tạo.

Bạn có thể gửi cấu hình riêng cho một người ở Tích hợp › Biến với phạm vi Một người dùng, điền ID tài khoản (usr_…). ID này có trong payload webhook user.created và trong Seller API. Xem Biến ứng dụng.

Cấm và bỏ cấm

  1. Ở Người dùng cuối › Người dùng, bấm nút ⋯ cuối dòng.
  2. Chọn Cấm.

Ngay khi cấm, trạng thái chuyển sang Bị cấm và mọi phiên đang mở của tài khoản bị kết thúc. Phần mềm đang chạy nhận session_expired ở yêu cầu kế tiếp (thường là heartbeat), lần đăng nhập đúng mật khẩu sau đó nhận user_banned. License và các máy đã gắn không bị đụng tới. Thao tác này phát webhook user.banned.

Bỏ cấm đưa trạng thái về Đang dùng. Phiên đã kết thúc không được khôi phục, người dùng chỉ cần đăng nhập lại.

Đặt lại mật khẩu

Clavis không có luồng "quên mật khẩu" tự phục vụ cho người dùng cuối, nên việc đặt lại do bạn làm:

  1. Bấm ⋯ ở dòng người dùng, chọn Đặt lại mật khẩu.
  2. Nhập mật khẩu mới (ít nhất 8 ký tự), bấm Lưu.

Mọi phiên đang mở của tài khoản kết thúc ngay, nên các máy đang dùng phải đăng nhập lại bằng mật khẩu mới. Gửi mật khẩu cho khách qua kênh hỗ trợ của bạn.

Xoá người dùng

Chọn ⋯ › Xoá. Tài khoản bị xoá ngay, không có hộp xác nhận và không hoàn tác được. Sau khi xoá:

  • Tên đăng nhập được giải phóng và license có thể gắn với một tài khoản mới.
  • License vẫn còn, kể cả license ACCT-… tự tạo. Các máy đã gắn vẫn giữ suất trên license đó.
  • Phiên đang mở không bị kết thúc.

Hạn mức người dùng theo gói

Khi phần mềm đăng ký tài khoản hoặc khi bạn thêm từ dashboard, hệ thống đếm số tài khoản hiện có của ứng dụng đó (tính cả tài khoản bị cấm) và so với hạn mức Người dùng của gói workspace:

  • Đăng ký từ phần mềm khi đã đủ: bị từ chối với mã user_limit.
  • Thêm từ dashboard khi đã đủ: hộp thoại báo lỗi, không tạo tài khoản.
  • Gói dùng hạn mức mềm thì không chặn.
Gói (cấu hình mặc định)Người dùngKhi chạm trần
Basic500Chặn tài khoản mới
Premium50.000Hạn mức mềm, không chặn

Con số áp dụng cho workspace của bạn hiển thị ở Tài khoản & tổ chức › Gói & sử dụng, kèm tổng số người dùng của mọi ứng dụng. Xoá tài khoản không còn dùng sẽ trả lại chỗ. Xem Gói Basic, Premium và hạn mức và bảng giá.

Đăng nhập từ phần mềm

Với SDK JavaScript, đăng ký và đăng nhập đều trả về cùng một kết quả đã ký: phiên, license, quyền tính năng và biến. Đăng ký thành công nghĩa là người dùng đã đăng nhập luôn trên máy đó.

import { ClavisClient, ClavisError } from "@clavisauh/sdk";

const clavis = new ClavisClient({
  baseUrl: "https://api.example.com",
  appId: "app_…",
  appPublicKey: "…",
  device, // định danh máy, xem Bắt đầu nhanh
});

const { app } = await clavis.init();
if (app.loginMode === "key") showKeyForm();

try {
  // Lần đầu: key có thể là null (tài khoản miễn phí theo gói mặc định)
  const grant = await clavis.register(key ?? null, username, password, email);
  // Các lần sau: const grant = await clavis.login(username, password);
  if (clavis.has("export_pdf")) enableExport();
  showExpiry(grant.license.expiresAt);
} catch (err) {
  if (!(err instanceof ClavisError)) throw err;
  showError(err.code); // ánh xạ mã sang thông báo của bạn
}

// Chế độ Tài khoản + license key: nâng cấp tài khoản đang đăng nhập
await clavis.redeem(paidKey);

Mỗi lần đăng nhập, máy được gắn vào license của tài khoản, nên giới hạn số máy tính theo license (xem Thiết bị, HWID và chuyển máy). clavis.logout() kết thúc phiên hiện tại.

Các mã lỗi thường gặp:

MãÝ nghĩa
invalid_credentialsSai tên đăng nhập hoặc mật khẩu. Key sai khi đăng ký cũng trả mã này
username_takenTên đăng nhập đã có trong ứng dụng
license_already_registeredKey đã gắn với tài khoản khác
user_limitỨng dụng đã đủ số tài khoản của gói
user_bannedTài khoản đang bị cấm
no_licenseTài khoản chưa liên kết license
too_many_attemptsĐã sai 20 lần từ cùng một IP trong 15 phút, phải chờ rồi thử lại
device_limitLicense đã đủ số máy

Mọi lần user.register, user.login và user.redeem đều được ghi ở Bảo mật ứng dụng › Nhật ký hoạt động, kèm lý do khi bị từ chối.

Liên quan

Bạn cần giúp gì?

Câu hỏi thường gặp

ClavisAUH là gì?

Dịch vụ bản quyền và xác thực cho phần mềm desktop: license key, khoá thiết bị, đăng nhập người dùng và phản hồi có chữ ký. Tất cả quản lý trên một dashboard

Vì sao kẻ crack không làm giả được server?

SDK chỉ tin câu trả lời ký bằng khoá bí mật của ứng dụng. Khoá đó không bao giờ rời server của chúng tôi, nên server giả không ký được và bị từ chối

Trong file chạy của tôi có gì?

Mã ứng dụng và khoá công khai. Không có bí mật nào, vì mỗi thiết bị tự tạo cặp khoá riêng ở lần chạy đầu

Có chạy được khi offline không?

Có. Mọi gói đều có token offline có chữ ký dùng được 7 ngày, ứng dụng tự kiểm tra tại máy. Premium cho bạn chọn bao lâu. License đã thu hồi vẫn có thể chạy offline trong khoảng đó, trừ khi Chế độ chỉ online đang bật

Hỗ trợ những ngôn ngữ nào?

Hiện có JavaScript và TypeScript. Tiếp theo là C++, C# và Python, cùng một giao thức công khai

Gói Basic có miễn phí thật không?

Có. Không giới hạn thời gian, không cần thẻ. Cần nhiều hơn thì lên Premium

Liên hệ