2012-08-25 13 views
8

मैं कुकीज़ का उपयोग करने और express.js से परहेज किए बिना node.js और socket.io के माध्यम से websockets पर सत्र-सत्र बनाना चाहता हूं, क्योंकि क्लाइंट वातावरण में क्लाइंट भी नहीं चल रहे हैं। किसी ने इसे पहले से ही किया है या अवधारणा के सबूत के साथ कुछ अनुभव मिला है?एक्सप्रेस.जेएस के बिना सॉकेट.ओ सत्र?

+0

http://socket.io/ पर उदाहरण एक्सप्रेस का उपयोग नहीं करते हैं, लेकिन मुझे लगता है कि आप पहले से ही जानते हैं। आपको किस अतिरिक्त जानकारी की आवश्यकता है? –

उत्तर

1

तो यह उपयोगी हो सकता है, https://github.com/LearnBoost/socket.io/wiki/Authorizing

आप सभी सत्र चर का ट्रैक रखने के सकता है और विशिष्ट में निम्नलिखित उपलब्ध के संयोजन का उपयोग उपयोगकर्ताओं की पहचान handshakeData

{ 
    headers: req.headers  // <Object> the headers of the request 
, time: (new Date) +''  // <String> date time of the connection 
, address: socket.address() // <Object> remoteAddress and remotePort object 
, xdomain: !!headers.origin // <Boolean> was it a cross domain request? 
, secure: socket.secure  // <Boolean> https connection 
, issued: +date    // <Number> EPOCH of when the handshake was created 
, url: request.url   // <String> the entrance path of the request 
, query: data.query   // <Object> the result of url.parse().query or a empty object 
} 

इस उदाहरण के रूप में अच्छी तरह से मदद मिल सकती है , बस अपने गैर-ब्राउज़र क्लाइंट अलग-अलग तरीके से जानकारी प्रदान करते हैं:

SocketIO + MySQL Authentication

+0

अच्छा बिंदु, अगर मैं क्लाइंटसाइड पर req.headers में एक sessionid जोड़ सकता हूं और इसे प्राधिकरण पर मान्य कर सकता हूं। इसलिए मुझे req और res vars से decunpled एक स्टैंडअलोन sessionhandler लिखना है। हो सकता है कि मैं सत्र-सत्र के रूप में कनेक्ट-सत्र को सत्रस्थानों और अन्य चीजों के साथ संगत होने के लिए उपयोग कर सकूं। क्या आप जानते हैं कि मैं क्लाइंट साइड पर हेडर में मूल्य कैसे जोड़ सकता हूं? एक बार मेरा वेबसाइकिल कनेक्शन अधिकृत हो जाने पर, क्या यह एक ही http-request के रूप में उतना ही सुरक्षित है जितना कि हर सत्र अपने सत्र को मान्य करता है? –

3

सॉकेट.ओ कनेक्शन स्थापित होने से पहले, एक हैंडशेक तंत्र है, डिफ़ॉल्ट रूप से, सभी ठीक से आने वाले अनुरोध सफलतापूर्वक हाथ हिलाते हैं। हालांकि हैंडशेक के दौरान सॉकेट डेटा प्राप्त करने का एक तरीका है और आने वाली कनेक्शन अनुरोध को स्वीकार या अस्वीकार करने वाली आपकी पसंद के आधार पर सही या गलत लौटाता है। यहां socket.io दस्तावेज़ों का उदाहरण दिया गया है:

क्योंकि प्राधिकरण के बाद हैंडशेकडेटा संग्रहीत किया जाता है, आप वास्तव में इस ऑब्जेक्ट से डेटा जोड़ या निकाल सकते हैं।

var io = require('socket.io').listen(80); 

io.configure(function(){ 
    io.set('authorization', function (handshakeData, callback) { 
    // findDatabyip is an async example function 
    findDatabyIP(handshakeData.address.address, function (err, data) { 
     if (err) return callback(err); 

     if (data.authorized) { 
     handshakeData.foo = 'bar'; 
     for(var prop in data) handshakeData[prop] = data[prop]; 
     callback(null, true); 
     } else { 
     callback(null, false); 
     } 
    }) 
    }); 
}); 

कॉलबैक का पहला तर्क समारोह त्रुटि है, तो आप एक स्ट्रिंग यहाँ प्रदान कर सकते हैं, जो स्वत: ग्राहक मना कर देगा, तो शून्य पर सेट नहीं। दूसरा तर्क बूलियन है, भले ही आप आने वाले अनुरोध को स्वीकार करना चाहते हैं या नहीं।

संबंधित मुद्दे