Bỏ qua, đến nội dung

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

Sử dụng

Form công khai có an toàn không?

Plugin sử dụng nhiều lớp bảo mật:

  1. JWT Token — mỗi phiên truy cập form nhận token hết hạn sau 1 giờ
  2. Password protection — có thể đặt mật khẩu để giới hạn truy cập
  3. ACL bypass có kiểm soát — chỉ skip ACL cho Collection và action cụ thể liên quan đến form
  4. HTTPS — dữ liệu truyền tải mã hóa (phụ thuộc cấu hình server)

Khuyến nghị thêm:

  • Bật CAPTCHA nếu form public trên internet
  • Giới hạn field hiển thị (không expose field nội bộ)
  • Theo dõi submissions để phát hiện bất thường

Dữ liệu gửi vào đâu?

Trực tiếp vào Collection đã cấu hình. Dữ liệu xuất hiện như bản ghi thông thường trong Collection Manager — có thể xem, sửa, xóa, export bình thường.

Public form có kích hoạt workflow không?

Có. Plugin chuyển action publicSubmit thành create trước khi xử lý. Điều này đảm bảo mọi workflow trigger trên action create đều được kích hoạt — ví dụ gửi email xác nhận, tạo task tự động, v.v.

Có thể giới hạn số lần gửi form không?

Plugin hiện tại không có tính năng giới hạn submission trực tiếp. Các cách workaround:

  • Sử dụng workflow để kiểm tra trùng lặp (VD: cùng email)
  • Kết hợp rate limiting ở tầng reverse proxy (Nginx, Cloudflare)
  • Tắt form (enabled: false) khi đủ số lượng

Token hết hạn sau bao lâu?

JWT token hết hạn sau 1 giờ. Nếu người dùng mở form và để lâu hơn 1 giờ trước khi submit, submission sẽ thất bại với lỗi 401. Người dùng cần tải lại trang để lấy token mới.

Cấu hình

Làm sao bảo vệ form bằng mật khẩu?

Khi tạo hoặc sửa form, điền giá trị vào trường password. Khi người dùng truy cập link, họ phải nhập mật khẩu đúng trước khi thấy form.

Password hỗ trợ biến môi trường — ví dụ bạn có thể dùng template string thay vì hardcode mật khẩu.

Có hỗ trợ form từ nhiều data source không?

Có. Trường collection trong publicForms sử dụng định dạng dataSource:collectionName. Plugin sẽ lấy Collection từ data source tương ứng. Nếu không chỉ định data source, mặc định là main.

Làm sao thêm loại form tùy chỉnh?

Sử dụng API registerFormType trên client:

typescript
const plugin = app.pm.get('public-forms');
plugin.registerFormType('survey', {
  label: 'Khảo sát',
  uiSchema: (options) => ({
    type: 'void',
    properties: {
      // Định nghĩa schema cho form khảo sát
    },
  }),
});

Loại form mới sẽ xuất hiện trong dropdown khi tạo public form.

Lỗi thường gặp

Kiểm tra:

  1. Form có enabled: true không
  2. URL đúng format /public-forms/<key> không
  3. Key trong URL khớp với key trong database không

Form gửi thành công nhưng không thấy dữ liệu

Kiểm tra:

  1. Dữ liệu có thể đã lưu vào Collection khác (nếu chọn sai Collection khi tạo form)
  2. Kiểm tra data source — nếu form cấu hình cho data source khác main
  3. Kiểm tra filter trong Collection Manager — có thể đang lọc bỏ bản ghi mới

Lỗi 401 khi submit form

Nguyên nhân phổ biến:

  • Token hết hạn (sau 1 giờ) — tải lại trang
  • Form bị tắt (enabled: false) sau khi người dùng mở trang
  • Sai mật khẩu — nếu form có password protection
  • Token không hợp lệ — xóa cache trình duyệt và thử lại

Form có association field (quan hệ) không hoạt động

Plugin tự động phân tích association fields từ UI Schema và thêm vào targetCollections. ACL được skip cho các Collection liên quan. Nếu vẫn lỗi:

  1. Kiểm tra Schema có đúng x-collection-field không
  2. Kiểm tra Collection target có tồn tại không
  3. Kiểm tra mode của association field (Nester, SubTable, PopoverNester — các mode khác có thể không được hỗ trợ đầy đủ)