प्राइवेट चैनल
जिस चैनल का नाम private- से शुरू होता है, उसके लिए सार्वजनिक ऐप कुंजी के अलावा आपके बैकएंड से ऑथराइज़ेशन भी ज़रूरी है। आपका बैकएंड उस चैनल के लिए कॉल करने वाले को मंज़ूरी देता है और ऐप सीक्रेट से गणना किया गया हस्ताक्षर लौटाता है।
सीमित दायरे वाले डेटा के लिए प्राइवेट चैनल का उपयोग करें, जैसे किसी ग्राहक के ऑर्डर अपडेट, किसी टेनेंट का डैशबोर्ड या किसी एक व्यक्ति की सूचनाएँ।
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 और Kotlin के लिए पूर्ण ऑथराइज़ेशन URL ज़रूरी है, जबकि ब्राउज़र क्लाइंट उसी ओरिजिन का पाथ इस्तेमाल कर सकता है। अपने API का सेशन टोकन authHeaders के ज़रिए जोड़ें। क्लाइंट हर ऑथराइज़ेशन अनुरोध में ये हेडर शामिल करता है, दोबारा कनेक्ट होने के बाद के अनुरोधों में भी।
क्लाइंट कनेक्शन ID और चैनल का नाम authEndpoint पर पोस्ट करता है। सब्सक्रिप्शन तभी पूरा होता है जब एंडपॉइंट कॉल करने वाले को मंज़ूरी देकर मान्य हस्ताक्षर लौटाता है। चैनल ऑथराइज़ करना में अनुरोध, प्रतिक्रिया और हस्ताक्षर की जाने वाली स्ट्रिंग की परिभाषा दी गई है।
हर उपयोगकर्ता या हर टेनेंट के लिए चैनल का नाम रखना
संसाधन का दायरा चैनल के नाम में रखें और अपने एंडपॉइंट में उसकी जाँच करें। क्लाइंट किसी भी चैनल नाम का अनुरोध कर सकता है, इसलिए आपके बैकएंड को एक ग्राहक को दूसरे ग्राहक के चैनल की सदस्यता लेने से रोकना होगा:
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;
}यही तुलना ऑथराइज़ेशन का फ़ैसला है। ऐक्सेस कंट्रोल के लिए कभी भी ऐसे चैनल नामों पर निर्भर न रहें जिनका अनुमान लगाना कठिन हो।
प्राइवेट चैनल क्या-क्या सपोर्ट करते हैं
- क्लाइंट इवेंट। जब ऐप में क्लाइंट इवेंट सक्षम हों, तो सब्सक्राइब किया हुआ क्लाइंट आपके सर्वर से होकर गए बिना चैनल के अन्य क्लाइंट को
client-इवेंट भेज सकता है। सार्वजनिक चैनलों पर एज इन्हें अस्वीकार कर देता है। - कनेक्शन गिनती। जब ऐप में कनेक्शन गिनती और कनेक्शन गिनती इवेंट की सेटिंग चालू हों, तो क्लाइंट को चैनल के लिए
bird:connection_countमिलता है। - सर्वर से प्रकाशन। आपके सर्वर से प्रकाशन ठीक वैसे ही काम करता है जैसे सार्वजनिक चैनल के लिए:
channelsऐरे में चैनल का नाम दें। आपके सर्वर पर कोई ऑथराइज़ेशन लागू नहीं होता, क्योंकि उसके पास पहले से ऐप सीक्रेट है।
प्राइवेट चैनलों में सदस्य पहचान और सदस्य इवेंट नहीं होते। अगर आपको जानना है कि कौन मौजूद है, तो प्रेज़ेंस चैनल का उपयोग करें।
जब सब्सक्रिप्शन अस्वीकार हो जाए
अस्वीकार किया गया सब्सक्रिप्शन bird:subscription_error के रूप में आता है। इसके आम कारणों में आपके एंडपॉइंट से non-2xx प्रतिक्रिया या अनुरोध से मेल न खाने वाला सिग्नेचर शामिल है। समस्या निवारण के लिए चैनलों का ऑथराइज़ेशन देखें।
अगले कदम
- चैनलों का ऑथराइज़ेशन वह अनुबंध है जिसे आपका बैकएंड लागू करता है।
- प्रेज़ेंस चैनल उसी ऑथराइज़ेशन के ऊपर सदस्य पहचान जोड़ते हैं।
- इवेंट प्राप्तकर्ताओं को बाहर रखना किसी क्लाइंट को उसके अपने कारण हुआ इवेंट प्राप्त करने से रोकता है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।