Channel privat
Channel yang namanya diawali dengan private- memerlukan otorisasi dari backend Anda selain kunci aplikasi publik. Backend Anda menyetujui pemanggil untuk channel tersebut dan mengembalikan tanda tangan yang dihitung menggunakan rahasia aplikasi.
Gunakan channel privat untuk data bercakupan tertentu seperti pembaruan pesanan pelanggan, dasbor tenant, atau notifikasi satu orang.
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
authEndpoint: "/bird/auth",
});
const orders = bird.subscribe("private-orders-4821");
orders.bind("order-updated", (data) => {
console.log(data);
});let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
authEndpoint: URL(string: "https://your-backend.example.com/bird/auth")
))
let orders = bird.subscribe("private-orders-4821")
orders.bind("order-updated") { data in
print(data ?? "")
}val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
authEndpoint = "https://your-backend.example.com/bird/auth",
)
)
val orders = bird.subscribe("private-orders-4821")
orders.bind("order-updated") { data ->
println(data)
}Swift dan Kotlin memerlukan URL otorisasi absolut, sedangkan klien browser dapat menggunakan jalur same-origin. Tambahkan token sesi API Anda melalui authHeaders. Klien menyertakan header ini di setiap permintaan otorisasi, termasuk permintaan setelah koneksi ulang.
Klien mengirimkan ID koneksi dan nama channel ke authEndpoint. Langganan selesai hanya setelah endpoint menyetujui pemanggil dan mengembalikan tanda tangan yang valid. Mengotorisasi channel mendefinisikan permintaan, respons, dan string yang ditandatangani.
Penamaan channel per pengguna atau per tenant
Masukkan cakupan sumber daya ke dalam nama channel dan verifikasi di endpoint Anda. Klien dapat meminta nama channel apa pun, jadi backend Anda harus mencegah langganan lintas pelanggan:
if (channel_name !== `private-orders-${user.accountId}`) {
return res.sendStatus(403);
}if channel_name != f"private-orders-{user.account_id}":
return Response(status=403)if channelName != "private-orders-"+user.AccountID {
http.Error(w, "forbidden", http.StatusForbidden)
return
}if ($channelName !== "private-orders-{$user->accountId}") {
http_response_code(403);
return;
}Perbandingan ini adalah keputusan otorisasi. Jangan pernah mengandalkan nama channel yang sulit ditebak untuk kontrol akses.
Apa yang didukung channel privat
- Event klien. Jika aplikasi mengaktifkan event klien, klien yang berlangganan dapat mengirim event client- ke klien lain di channel tersebut tanpa perjalanan bolak-balik melalui server Anda. Edge menolak event ini di channel publik.
- Penghitungan koneksi. Dengan pengaturan penghitungan koneksi dan event jumlah koneksi aplikasi diaktifkan, klien menerima bird:connection_count untuk channel tersebut.
- Publikasi server. Publikasi dari server Anda bekerja persis seperti pada channel publik: cantumkan nama channel di array channels. Tidak ada otorisasi yang berlaku untuk server Anda, yang sudah memegang rahasia aplikasi.
Channel privat tidak memiliki identitas anggota dan tidak memiliki event anggota. Jika Anda perlu mengetahui siapa yang hadir, gunakan channel presence.
Ketika langganan ditolak
Langganan yang ditolak diterima sebagai bird:subscription_error. Penyebab umum meliputi respons non-2xx dari endpoint Anda atau tanda tangan yang tidak cocok dengan permintaan. Lihat Mengotorisasi channel untuk pemecahan masalah.
Langkah selanjutnya
- Mengotorisasi channel adalah kontrak yang diimplementasikan backend Anda.
- Channel presence menambahkan identitas anggota di atas otorisasi yang sama.
- Mengecualikan penerima event mencegah klien menerima event yang ditimbulkannya sendiri.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini.