Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh
NocoBase hỗ trợ mở rộng các loại xác thực người dùng theo nhu cầu. Xác thực người dùng thường có hai loại: một là xác định danh tính người dùng ngay trong ứng dụng NocoBase, ví dụ như đăng nhập bằng mật khẩu, đăng nhập bằng SMS, v.v.; loại còn lại là do dịch vụ bên thứ ba xác định danh tính người dùng và thông báo kết quả cho ứng dụng NocoBase thông qua các callback, ví dụ như các phương thức xác thực OIDC, SAML, v.v. Quy trình xác thực cho hai loại phương thức này trong NocoBase cơ bản như sau:
api.auth.signIn(), yêu cầu giao diện đăng nhập auth:signIn, đồng thời gửi định danh của bộ xác thực đang sử dụng thông qua tiêu đề yêu cầu X-Authenticator đến backend.auth:signIn dựa trên định danh bộ xác thực trong tiêu đề yêu cầu để chuyển tiếp đến loại xác thực tương ứng. Phương thức validate trong lớp xác thực đã đăng ký của loại xác thực đó sẽ xử lý logic tương ứng.token xác thực từ phản hồi của giao diện auth:signIn, lưu token vào Local Storage và hoàn tất đăng nhập. Bước này được SDK tự động xử lý nội bộ.
auth:getAuthUrl), và mang theo thông tin như tên ứng dụng, định danh bộ xác thực theo giao thức.auth:redirect), trả về kết quả xác thực, đồng thời trả về thông tin như tên ứng dụng, định danh bộ xác thực.AuthManager để lấy lớp xác thực tương ứng, và chủ động gọi phương thức auth.signIn(). Phương thức auth.signIn() sẽ gọi phương thức validate() để xử lý logic ủy quyền.token xác thực, sau đó chuyển hướng 302 trở lại trang frontend, và mang theo token cùng định danh bộ xác thực trong các tham số URL, ?authenticator=xxx&token=yyy.
Tiếp theo, chúng ta sẽ tìm hiểu cách đăng ký các giao diện phía máy chủ và giao diện người dùng phía client.
Kernel của NocoBase cung cấp khả năng đăng ký và quản lý các loại xác thực mở rộng. Để xử lý logic cốt lõi của việc mở rộng plugin đăng nhập, bạn cần kế thừa lớp trừu tượng Auth của kernel và triển khai các giao diện tiêu chuẩn tương ứng.
Tham khảo API đầy đủ tại Auth.
Kernel cũng đã đăng ký các thao tác tài nguyên cơ bản liên quan đến xác thực người dùng.
| API | Mô tả |
|---|---|
auth:check | Kiểm tra người dùng đã đăng nhập chưa |
auth:signIn | Đăng nhập |
auth:signUp | Đăng ký |
auth:signOut | Đăng xuất |
Trong hầu hết các trường hợp, loại xác thực người dùng mở rộng cũng có thể sử dụng logic xác thực JWT hiện có để tạo chứng chỉ cho người dùng truy cập API. Lớp BaseAuth trong kernel đã triển khai cơ bản lớp trừu tượng Auth, tham khảo BaseAuth. Các plugin có thể trực tiếp kế thừa lớp BaseAuth để tái sử dụng một phần mã logic, giúp giảm chi phí phát triển.
Khi triển khai logic xác thực người dùng, thường liên quan đến việc xử lý dữ liệu người dùng. Trong ứng dụng NocoBase, theo mặc định, các bộ sưu tập liên quan được định nghĩa như sau:
| Bộ sưu tập | Mô tả | Plugin |
|---|---|---|
users | Lưu trữ thông tin người dùng, như email, biệt danh và mật khẩu | Plugin người dùng (@nocobase/plugin-users) |
authenticators | Lưu trữ thông tin bộ xác thực (thực thể loại xác thực), tương ứng với loại xác thực và cấu hình | Plugin xác thực người dùng (@nocobase/plugin-auth) |
usersAuthenticators | Liên kết người dùng và bộ xác thực, lưu thông tin người dùng dưới bộ xác thực tương ứng | Plugin xác thực người dùng (@nocobase/plugin-auth) |
Thông thường, các phương thức đăng nhập mở rộng chỉ cần sử dụng users và usersAuthenticators để lưu trữ dữ liệu người dùng tương ứng. Chỉ trong những trường hợp đặc biệt mới cần tự thêm một bộ sưu tập mới.
Các trường chính của usersAuthenticators là:
| Trường | Mô tả |
|---|---|
uuid | Định danh duy nhất của người dùng cho loại xác thực này, ví dụ: số điện thoại, OpenID của WeChat |
meta | Trường JSON, các thông tin khác cần lưu trữ |
userId | ID người dùng |
authenticator | Tên bộ xác thực (định danh duy nhất) |
Đối với các thao tác truy vấn và tạo người dùng, mô hình dữ liệu AuthModel của authenticators cũng đóng gói một số phương thức có thể được sử dụng trong lớp CustomAuth thông qua this.authenticator[tênPhươngThức]. Tham khảo API đầy đủ tại AuthModel.
Phương thức xác thực mở rộng cần được đăng ký với module quản lý xác thực.
Giao diện người dùng phía client được đăng ký thông qua giao diện registerType do client của plugin xác thực người dùng cung cấp:

Nếu có nhiều bộ xác thực tương ứng với loại xác thực đã đăng ký biểu mẫu đăng nhập, chúng sẽ được hiển thị dưới dạng các Tab. Tiêu đề của Tab là tiêu đề của bộ xác thực được cấu hình ở phần quản trị.


Thường là nút đăng nhập của bên thứ ba, nhưng trên thực tế có thể là bất kỳ thành phần nào.

Nếu cần chuyển từ trang đăng nhập sang trang đăng ký, bạn cần tự xử lý trong thành phần đăng nhập.

Phía trên là cấu hình bộ xác thực chung, phía dưới là phần biểu mẫu cấu hình tùy chỉnh có thể đăng ký.
Để gửi các yêu cầu API liên quan đến xác thực người dùng từ phía client, bạn có thể sử dụng SDK do NocoBase cung cấp.
Tham khảo API chi tiết tại @nocobase/sdk - Auth.