अधिकृत कनेक्शन अनिवार्य करना
ऐप कुंजी सार्वजनिक होती है। जो भी आपका पेज लोड कर सकता है, वह इसका उपयोग करके कनेक्शन खोल सकता है और सार्वजनिक चैनलों को सब्सक्राइब कर सकता है।
अधिकृत कनेक्शन सेटिंग में हर नए कनेक्शन को 30 सेकंड के भीतर साबित करना होता है कि वह अधिकृत है। जो कनेक्शन समय पर अधिकृत नहीं होते, Realtime edge उन्हें बंद कर देता है।
अधिकृत कनेक्शन अनिवार्य करें
Realtime ऐप्स पेज पर ऐप के लिए अधिकृत कनेक्शन चालू करें। आप Realtime API के ज़रिए authorized_connections को true पर भी सेट कर सकते हैं। यह सेटिंग उन सभी कनेक्शनों पर लागू होती है जो ऐप की किसी भी कुंजी का उपयोग करते हैं।
प्रोडक्शन में सेटिंग चालू करने से पहले क्लाइंट को अपडेट करें ताकि वे अधिकृत हों। सेटिंग चालू करने से पहले बने कनेक्शन खुले रहते हैं, लेकिन पुराने क्लाइंट के बाद वाले कनेक्शन ऑथराइज़ेशन टाइमआउट के बाद विफल हो जाते हैं।
किसे अधिकृत माना जाता है
नया कनेक्शन अनधिकृत स्थिति में शुरू होता है। इनमें से कोई भी एक कार्रवाई उसे अधिकृत करती है:
- कोई प्राइवेट या प्रेज़ेंस सब्सक्रिप्शन सफल होता है। क्लाइंट कनेक्शन ID को आपके
authEndpointपर भेजता है, आपका बैकएंड उस पर हस्ताक्षर करता है, और edge हस्ताक्षर की जाँच करता है। चैनलों को अधिकृत करना देखें। signin()सफल होता है। क्लाइंट कनेक्शन ID को आपकेmemberAuthEndpointपर भेजता है और हस्ताक्षरित सदस्य पहचान प्राप्त करता है। पूरे साइन-इन फ़्लो के लिए सदस्य कनेक्शन समाप्त करना देखें।
दोनों तरीके एक ही बात साबित करते हैं: ऐप सीक्रेट रखने वाले किसी पक्ष ने इस कनेक्शन की पुष्टि की है। किसी पब्लिक चैनल को सब्सक्राइब करने से कुछ साबित नहीं होता और इससे कुछ भी अधिकृत नहीं होता।
केवल पब्लिक चैनल वाली स्थिति
जो क्लाइंट केवल पब्लिक चैनलों को सब्सक्राइब करता है, वह सामान्य रूप से आपके बैकएंड से संपर्क नहीं करता। अधिकृत कनेक्शन अनिवार्य करने के बाद signin() को कॉल करें, ताकि कनेक्शन किसी प्राइवेट सब्सक्रिप्शन के बिना अधिकृत हो सके:
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: "/bird/auth/member",
});
await bird.signin();
const status = bird.subscribe("build-status");
status.bind("build-finished", (data) => render(data));import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
try await bird.signin()
let status = bird.subscribe("build-status")
status.bind("build-finished") { data in
render(data)
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
bird.signin() // suspending
val status = bird.subscribe("build-status")
status.bind("build-finished") { data ->
render(data)
}signin() को एक बार कॉल करें। हर रीकनेक्ट के बाद क्लाइंट फिर से साइन इन करता है, क्योंकि पहचान कनेक्शन से जुड़ी होती है। जब कॉल करने वाले को कनेक्ट नहीं करना चाहिए, तब अपने मेंबर ऑथराइज़ेशन एंडपॉइंट से 403 Forbidden लौटाएँ।
अगर ऐप लोड होते समय किसी प्राइवेट या प्रेज़ेंस चैनल को सब्सक्राइब करता है, तो सफल सब्सक्रिप्शन ही कनेक्शन को अधिकृत कर देता है।
अधिकृत न होने पर क्लाइंट को क्या दिखता है
एज कनेक्शन को कोड 4009 और कारण Connection not authorized within timeout के साथ बंद करता है। क्लाइंट इस रेंज के कोड पर फिर से प्रयास नहीं करते, इसलिए कनेक्शन failed स्थिति में चला जाता है।
bird.connection.bind("error", ({ code, message }) => {
if (code === 4009) console.warn(message);
});bird.onError { error in
if error.code == 4009 { print(error.message) }
}bird.onError { error ->
if (error.code == 4009) println(error.message)
}कोड 4009 ऐसे मेंबर को भी दर्शाता है जिसके कनेक्शन आपके बैकएंड ने समाप्त कर दिए हैं। लॉगिन या साइन-आउट स्थिति चुनने से पहले कारण जाँचें। मेंबर कनेक्शन समाप्त करना और कनेक्शन लाइफसाइकल और रीकनेक्शन देखें।
कनेक्शन जब तक अधिकृत नहीं होते, तब तक वे ऐप के कनेक्शन कोटा में नहीं गिने जाते।
ऑथराइज़ेशन का दायरा
अधिकृत कनेक्शन अनिवार्य करने से यह नियंत्रित होता है कि कौन कनेक्शन खुला रख सकता है। यह ऑथराइज़ेशन जाँचों की जगह नहीं लेता और यह नहीं बदलता कि कौन किसी चैनल को पढ़ सकता है:
- पब्लिक चैनल हर अधिकृत कनेक्शन के लिए पब्लिक ही रहता है। अगर इवेंट किसी एक ग्राहक के हैं, तो प्राइवेट चैनल का उपयोग करें और अपने एंडपॉइंट में चैनल का नाम जाँचें।
- आपके अपने ऑथ एंडपॉइंट जिस किसी के लिए हस्ताक्षर करते हैं, वह अधिकृत हो जाता है। इसलिए ढीली जाँच वाला एंडपॉइंट उतनी ही आसानी से अधिकार बाँटता है जितनी आसानी से ऐप कुंजी बाँटती थी।
अगले कदम
- चैनलों को अधिकृत करना वह हस्ताक्षर है जिसे आपका बैकएंड प्राइवेट और प्रेज़ेंस सब्सक्रिप्शन के लिए बनाता है।
- जब इवेंट स्वयं किसी व्यक्ति से जुड़े हों, तब प्राइवेट चैनल सही विकल्प हैं।
- सदस्य कनेक्शन समाप्त करना में
signin()और4009के दूसरे उपयोग की जानकारी है। - किसी सदस्य को इवेंट भेजना किसी चैनल के बजाय साइन-इन की गई पहचान को इवेंट भेजता है।
- कनेक्शन लाइफ़साइकल और दोबारा कनेक्शन बताता है कि
4009अंतिम स्थिति क्यों है।
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।