Để kiểm tra một máy Supabase PPXTERM000XPP trên máy cục bộ, hãy dùng host.docker.internal Khi cả dự án Supabase và bộ nhận tín hiệu của bạn chạy trên máy tính của bạn, hoặc sử dụng một đường hầm HTTPS công cộng khi một dự án PPXTERM000XPP máy phải gọi ứng dụng cục bộ của bạn. Vấn đề phân biệt: Postgres cục bộ chạy trong Docker, nơi localhost có nghĩa là hộp cơ sở dữ liệu, trong khi máy Supabase cần một URL có thể truy cập Internet.
PPXTERM00009PP Database Webhooks gửi
Database Webhooks phản ứng với Postgres INSERT. UPDATE, và DELETE thao tác trên bảng chọn. Supabase mô tả chúng như là một asyncherous bao quanh kích hoạt bằng cách sử dụng các pg_net Mở rộng. Giao dịch thay đổi hàng không chờ cho người nhận của bạn hoàn thành logic kinh doanh của nó, giảm sự kết nối nhưng cũng có nghĩa là người nhận phải được quan sát và nhận thức thất bại.
Chương trình JSON cho biết hoạt động, giản đồ và bảng và bao gồm dữ liệu hàng. Để chèn và cập nhật, record chứa hàng mới. Để cập nhật và xoá bỏ, old_record cung cấp hàng trước nơi có thể dùng. Xây dựng người quản lý xung quanh phong bì ghi chép thay vì xem mỗi yêu cầu như là một đối tượng hàng.
Name
Supabase cục bộ cho một ứng dụng cục bộ: sử dụng máy Docker
♪ Khi bạn chạy ♪ supabase startPostgres đang ở trong một container. Name http://localhost:3000/api/supabase-db-hook Vòng trở lại cái thùng đó và thường thất bại. Supabase chính thức Tài liệu Database Webhooks cho mục tiêu host.docker.internal:
http://host.docker.internal:3000/api/supabase-db-hook
Đường này không cần phải có đường hầm công cộng. Trên máy Linux nơi máy không sẵn sàng, hãy sử dụng bản đồ đại lộ máy được hỗ trợ bởi thiết lập Docker hoặc địa chỉ LAN máy của bạn, như các bác sĩ PPXTERM000XPP gợi ý. Xác nhận từ một container, không chỉ từ trình duyệt máy.
Máy Supabase cho một ứng dụng cục bộ: dùng HTTPS
Một cơ sở dữ liệu đám mây không thể giải quyết tên máy PPXTERM000 24XPP của máy tính xách tay. Chạy ứng dụng cục bộ và chạy npx portpreview 3000rồi cấu hình:
https://your-subdomain.portpreview.dev/api/supabase-db-hook
Dùng một dự án phát triển tận tâm hoặc bàn rủi ro thấp. Lưỡi câu mây có thể bao gồm dữ liệu thật, vì vậy phơi bày một bàn sản xuất ra một URL phát triển tạm thời thường là một chiến lược thử nghiệm kém.
Tạo một bộ nhận có thể xác nhận một bí mật chung
Không giống như các nhà cung cấp định nghĩa một pPXTERM000XPP đầu đề bắt buộc, PPXTERM26XPP là một yêu cầu có thể cấu hình ra ngoài. Bảo vệ điểm kết thúc với một đầu trang bí mật mà bạn điều khiển và cấu hình cùng một đầu trang trên móc kéo. TLS bảo vệ nó trong giao thông; một so sánh không đổi thời gian để tránh bị rò rỉ thời gian chuẩn bí mật thông qua ứng dụng của bạn.
// app/api/supabase-db-hook/route.ts
import crypto from 'node:crypto';
function safeEqual(a: string, b: string) {
const left = Buffer.from(a);
const right = Buffer.from(b);
return left.length === right.length &&
crypto.timingSafeEqual(left, right);
}
export async function POST(request: Request) {
const supplied = request.headers.get('x-webhook-secret') ?? '';
const expected = process.env.SUPABASE_DB_WEBHOOK_SECRET ?? '';
if (!expected || !safeEqual(supplied, expected)) {
return new Response('unauthorized', { status: 401 });
}
const payload = await request.json();
if (!['INSERT', 'UPDATE', 'DELETE'].includes(payload.type)) {
return new Response('unsupported event', { status: 400 });
}
await recordDelivery(payload);
return new Response('accepted', { status: 200 });
}
Người có đầu óc chia sẻ chứng minh sự hiểu biết về bí mật nhưng không bí mật gắn chặt bí mật đó với cơ thể. Nếu cần phải có bằng chứng giả mạo cấp độ cơ thể, hãy gửi Database Webhook đến một chiếc Edge Function nhỏ đáng tin cậy để xác nhận bí mật của chính nó, tính toán chiếc HMAC đã được chọn trên một cơ thể bị giới hạn, và chuyển nó cho người tiêu dùng địa phương hoặc sản xuất. Không được tạo ra X-Supabase-Signature Giả sử trừ khi lớp phát triển của chính bạn tạo ra và xác minh nó.
Name
- Chọn một bảng phát triển và quyết định thao tác nào là quan trọng.
- Tạo mục Database Webhook trong Supabase Dashboard dưới các cơ sở dữ liệu, chọn giản đồ, bảng và thao tác.
- Đặt địa chỉ URL Docker cục bộ hoặc đường hầm công cộng được mô tả ở trên.
- Thêm
Content-Type: application/jsonngẫu nhiênX-Webhook-Secretgiá trị nơi cấu hình đầu đề webok sẵn sàng. - Khởi động bộ nhận và chèn một hàng kiểm tra rõ ràng.
- Cập nhật một trường, rồi xoá hàng, kiểm tra tất cả các phong bì đã chọn.
- Gỡ bỏ hoặc tắt nút kiểm tra trước khi chuyển dự án hoặc đóng đường hầm.
Tên các hàng kiểm tra vì vậy làm sạch là xác định. Không được khởi động sự tích hợp toàn bộ bảng tại hồ sơ sản xuất của khách hàng chỉ để xem yêu cầu đến.
INSERT, UPDATE, và DELETE an toàn
INSERT
Dùng record như là tình trạng mới được đưa vào. Nếu bộ nhận tạo một đối tượng tương ứng ở nơi khác, hãy cất giữ chìa khóa chính của bảng mã nguồn là một phím vô hạn. Một sự kiện chèn có thể được gửi lần nữa trong tiến trình tua lại bằng tay hoặc thử lại tùy chọn.
UPDATE
So sánh record có old_record và chỉ hành động trên các lĩnh vực liên quan đến sự kết hợp. Việc cập nhật web có thể phát điện để nhãn thời gian hoặc siêu dữ liệu không liên quan. Việc lọc các thay đổi kinh doanh không thay đổi ngăn chặn những cuộc gọi từ dưới hạ nguồn đắt đỏ.
DELETE
Hàng đã xoá được đại diện bởi dữ liệu trước thay vì một hồ sơ hiện thời. Hãy làm cho bộ quản lý xóa bỏ sự khoan dung của các trường còn thiếu tùy chọn và quyết định xem hành động dưới hạ lưu là xóa bỏ, kiến trúc, hay đệ quy. Bảo quản các yêu cầu kiểm toán.
switch (payload.type) {
case 'INSERT':
await mirror.upsert(payload.record.id, payload.record);
break;
case 'UPDATE':
if (payload.old_record.status !== payload.record.status) {
await syncStatus(payload.record.id, payload.record.status);
}
break;
case 'DELETE':
await mirror.archive(payload.old_record.id);
break;
}
Đáng tin cậy khi giao hàng
Vì Database Webhooks là yêu cầu mạng bất thường, không coi biên nhận là giao dịch phân phối với sự thay đổi hàng đầu. Mặt từ xa của bạn có thể không sẵn sàng sau khi Postgres cam kết. Theo dõi kết quả yêu cầu và sự hòa giải thiết kế cho những gì không thể mất.
Đối với dòng công việc giá trị cao, một bảng ra ngoài là mạnh mẽ hơn: viết một thay đổi doanh nghiệp và ra hộp trong một cơ sở dữ liệu giao dịch, sau đó cho một công nhân cung cấp với thiết bị kiểm tra lại rõ ràng, reoff, và xử lý đã chết. Database Webhook có thể thông báo cho công nhân, nhưng sự hòa giải tuần hoàn vẫn nên tìm những hàng ngoài hộp.
Hãy làm cho người nhận được bình quyền. Một phím hữu ích kết hợp nguồn giản đồ, bảng, thao tác, phím chính, và một phiên bản hàng ổn định như updated_at; cho bảo đảm nghiêm ngặt, thêm một sự kiện không thay đổi UUID trong một hàng ngoài hộp. Tránh tranh cãi chỉ vì hai sự chuyển tiếp hợp lệ có thể tạo ra những hình chiếu tương tự.
Đang gọi một Supabase Edge Function
Nếu đích là một chồng Edge Function địa phương được phục vụ bởi Supabase, ví dụ được ghi chép là:
http://host.docker.internal:54321/functions/v1/my-function-name
Viên chức Hướng dẫn phát triển Edge Functions sử dụng supabase functions serve [function-name] để nạp đạn nóng địa phương. PPXTERM50XPP yêu cầu JWT xác thực theo mặc định. Đối với một chức năng móc mạng không thể cung cấp cho người dùng JWT, cấu hình chức năng đó một cách cố ý, ví dụ với verify_jwt = false in supabase/config.tomlNhư đã ghi chép trong Cấu hình hàm.PXTERM00053XPP thay thế khả năng xác thực JWT bằng bộ kiểm tra bí mật hoặc ký hiệu; tắt JWT riêng lẻ làm cho chức năng công cộng.
Name
Kết nối bị từ chối từ chồng cục bộ
Thay thế localhost có host.docker.internalđể xác minh ứng dụng gắn vào một giao diện có thể truy cập từ Docker, và xác nhận cổng. Trên PPXTERM57XPP, cấu hình độ phân giải máy-gateway, hoặc dùng máy IP. Một dịch vụ chỉ được ràng buộc vào một giao diện bất ngờ có thể vẫn từ chối giao diện container.
Dự án chủ nhà không bao giờ đến được lộ trình
Một dự án có máy cần một đường hầm HTTPS công cộng, không phải tên máy Docker. Xác nhận đường hầm là trực tiếp và URL của nó bao gồm cả lộ trình. Hãy kiểm tra DNS/PPXTERM60XPP bằng cách tự đăng nó lên.
Con đường trở về số 401
So sánh tên và giá trị đã cấu hình, xem để dẫn hoặc theo dấu khoảng trắng, và khởi động lại ứng dụng sau khi thay đổi biến môi trường. Ghi lại người dẫn đầu có tồn tại hay không, không bao giờ giá trị của nó. Nếu một bộ phận trung gian có đầu đề tùy chỉnh, hãy dùng một bộ thông thường Authorization: Bearer ... Đầu trang và xác nhận nó rõ ràng.
Hình khối tải nặng có vẻ sai.
Đăng nhập chỉ các phím cấp cao, thao tác, giản đồ, và bảng phát triển. Hãy nhớ rằng PPXTERM0002XPP sử dụng dữ liệu hàng trước và UPDATE có thể bao gồm cả hai phiên bản. Kiểm tra các ví dụ tải chính thức hiện tại trước khi thay đổi phân tích của bạn.
Cập nhật cơ sở dữ liệu thành công nhưng còn thiếu việc làm xuôi dòng
Hành vi đó có thể xảy ra trong một thiết kế bất thường. Xem xét bản ghi yêu cầu kết nối và pg_net Các chẩn đoán có sẵn trong môi trường của bạn, sau đó thêm việc thử lại hoặc hòa giải thay vì quay trở lại một giao dịch kinh doanh đã cam kết.
Danh sách bảo mật
- Sử dụng HTTPS để thử nghiệm host-to-local và xoay bí mật tạm thời chia sẻ sau đó.
- Chỉ cần gửi những cột cần thiết; tránh phơi bày những bàn nhạy cảm hoặc hàng hóa lớn.
- Kiểm tra đầu đề bí mật trước khi phân tích hoặc kiên trì thi thể.
- Áp dụng định dạng POST, giới hạn kích cỡ yêu cầu, điều khiển tốc độ và các bản ghi đã sửa đổi.
- Dùng cấu hình mạng chia vùng, dàn xếp và sản xuất.
- Xây dựng những sự kiện quan trọng để phục hồi sức khỏe.
- Tắt đường hầm đóng
Lỗi thường gặp nhất là địa chỉ mạng, không phải PPXTERM00065P: cuộc gọi cục bộ-container host.docker.internal; mây gọi bằng đường hầm công cộng. Một khi giao thông đến, điều trị xác thực và giao hàng đảm bảo đó là vấn đề thiết kế riêng biệt. ôn lại Bảo mật đường hầm chủ cục bộ và Name trước khi kết nối dữ liệu nhạy cảm.
