Giao diện
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:
- JWT Token — mỗi phiên truy cập form nhận token hết hạn sau 1 giờ
- Password protection — có thể đặt mật khẩu để giới hạn truy cập
- ACL bypass có kiểm soát — chỉ skip ACL cho Collection và action cụ thể liên quan đến form
- 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
Link form báo 404
Kiểm tra:
- Form có
enabled: truekhông - URL đúng format
/public-forms/<key>không - 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:
- Dữ liệu có thể đã lưu vào Collection khác (nếu chọn sai Collection khi tạo form)
- Kiểm tra data source — nếu form cấu hình cho data source khác
main - 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:
- Kiểm tra Schema có đúng
x-collection-fieldkhông - Kiểm tra Collection target có tồn tại không
- Kiểm tra mode của association field (Nester, SubTable, PopoverNester — các mode khác có thể không được hỗ trợ đầy đủ)