संपादित करें: सॉकेट.आईओ 1.0 में, मिडलवेयर अब उपयोग किया जाता है। प्राधिकरण इसलिए की तरह किया जा सकता है:
io.use(function(socket, next) {
var handshake = socket.request;
next();
});
अगर तुम सिर्फ next()
कॉलबैक करने के लिए एक त्रुटि वस्तु पारित सॉकेट अस्वीकार करने के लिए जरूरत के लिए, थे। एक ही बात नामस्थान के साथ किया जा सकता है:
Socket.IO में
io.of('/namespace').use(function(socket, next) {
var handshake = socket.request;
next();
});
प्राधिकरण एक समारोह जो एक बूलियन कि एक कॉलबैक से पारित हो जाता है में निर्णय लिया जाता है के माध्यम से चलाया जाता है। यह समारोह हर बार एक कनेक्शन एक हाथ मिलाना प्रयास करता है चलाता है, और यह कि यह क्या लगता है की तरह है:
io.set('authorization', function (handshake, callback) {
callback(null, true);
});
समारोह callback()
दो पैरामीटर स्वीकार करता है। पहला त्रुटि कारण है, यदि कोई है, और दूसरा पैरामीटर बुलियन है जो यह तय करता है कि कोई क्लाइंट कनेक्ट हो सकता है या नहीं। डिफ़ॉल्ट रूप से कोई प्रमाणीकरण नहीं होता है, इसलिए परिदृश्य ऊपर दिए गए कोड नमूने में दिखाया गया है, जहां कनेक्ट होने वाली सॉकेट को true
के साथ पारित होने की अनुमति है।
सॉकेट.आईओ में हैंडशेक किसी भी अन्य सूचना प्रौद्योगिकी से संबंधित हैंडशेक की तरह है। यह वार्ता की प्रक्रिया है, जो सॉकेट.आईओ के मामले में, यह तय करती है कि कोई क्लाइंट कनेक्ट हो सकता है, और यदि नहीं, तो कनेक्शन से इंकार कर देता है। हैंडशेक या तो एक्सएचआर या जेएसओएनपी अनुरोध के साथ शुरू किया गया है, और जब कोई प्राधिकरण निर्दिष्ट नहीं किया जाता है, तो यह बहुत कुछ नहीं करता है, लेकिन handshake
डेटा ऑब्जेक्ट में पारित डेटा में सहायक हो सकता है।
अपने अंतिम प्रश्न का उत्तर देने के लिए, हाँ, आप handshake
ऑब्जेक्ट में कुछ भी जोड़ सकते हैं।
io.set('authorization', function (handshake, callback) {
handshake.foo = 'bar';
callback(null, true);
});
io.sockets.on('connection', function(socket) {
console.log(socket.handshake.foo); // bar
});
यह बहुत उपयोगी है क्योंकि आप सॉकेट आधारित गुण स्टोर कर सकते हैं: वस्तु socket.handshake
वस्तु है, जो आप इस तरह काम करने के लिए अनुमति देता है के लिए एक ही चर संदर्भ है। इसके लिए एक आम उपयोग एक्सप्रेस फ्रेमवर्क के साथ है, जहां कोई सॉकेट.आईओ द्वारा पारित कुकीज़ के आधार पर सत्र आईडी की पहचान कर सकता है, जो तब एक मिलान सत्र की पहचान की जा सकती है।
धन्यवाद भाई। यह वह उत्तर है जिसे मैं ढूंढ रहा हूं। :) –
यह अधिक पसंद के लायक है। सादा तथ्य यह है कि हैंडशेक सॉकेट के माध्यम से सॉकेट.handshake के माध्यम से उपलब्ध है, इतनी दुखी उपयोगी है। – Deminetix
अगर मैं 'अगली (नई त्रुटि (' निषिद्ध ')) कहता हूं; '- क्लाइंट में मेरे कनेक्शन से इनकार करने के बारे में मुझे जानकारी कैसे प्राप्त हो सकती है? मैं मिडलवेयर से .emit() नहीं कर सकता क्योंकि 'अगली (नई त्रुटि (' '))' आगे संचार से इनकार करती है। – cadavre