2011-04-21 14 views
7

मैंने हाल ही में एक नोडजेस चैट सर्वर स्थापित किया है, चैट क्लाइंट एक php सर्वर द्वारा परोसा जाता है। जब उपयोगकर्ता लॉग इन करते हैं, तो उनके सत्र php सर्वर के mysql में संग्रहीत किए जाएंगे, और एक लॉगिन कुकी ब्राउज़र में संलग्न होगी।Node.js चैट - उपयोगकर्ता प्रमाणीकरण

मैं उन उपयोगकर्ताओं को प्रतिबंधित करना चाहता हूं जो केवल उपयोगकर्ताओं में लॉग इन करने में सक्षम हैं। इसे हासिल करने का सबसे अच्छा अभ्यास क्या है?

मेरे त्वरित सोचा:

जब चैट क्लाइंट लोड, यदि उपयोगकर्ता में लॉग इन किया है, मैं सॉकेट के माध्यम से verver NodeJS करने के लिए प्रवेश कुकी जानकारी भेज देंगे। फिर एक नोडजेज़ सत्र बनाएँ। जब उपयोगकर्ता चैट करते हैं, तो कुकी जानकारी के साथ संदेश को सॉकेट के माध्यम से नोडजेस सर्वर पर भेजा जाएगा। यदि कुकी जानकारी नोडजेज़ सत्र से मेल नहीं खाती है, तो संदेश प्रसारित नहीं किया जाएगा और क्लाइंट सॉकेट डिस्कनेक्ट हो जाएगा।

+0

के संभावित डुप्लिकेट के लिए देख रहा हूँ है: // stackoverflow.com/questions/5765777/node-js-how-to-create-and-read-session-with-express) – jmort253

उत्तर

3

एक वेबस्केट स्थायी स्थायी कनेक्शन है। जब आप वेबसाईट से कनेक्ट होते हैं तो आपको केवल एक बार फिर से रंगना पड़ता है।

बस अपनी लॉगिन कुकी को node.js पर भेजें और इसे सॉकेट कनेक्शन के संदर्भ में सर्वर पर संग्रहीत करें। फिर केवल प्रमाणित उपयोगकर्ताओं से संदेशों को संभाल लें और केवल प्रमाणित उपयोगकर्ताओं को प्रसारित करें।

समस्या यह है कि क्लाइंट साइड उपयोगकर्ता आसानी से इस कुकी को नकली बना सकते हैं क्योंकि नोड php से बात नहीं करता है यह सुनिश्चित करने के लिए कि यह एक वैध लॉगिन कुकी है।

now का उपयोग कर एक उदाहरण।

चेतावनी छद्म कोड

// server.js 
everyone.now.joinChat = function(cookie) { 
    chat.add(this, cookie); 
} 

everyone.now.serverMessage = function(message) { 
    if (chat.hasUser(this)) { 
     chat.broadcast(message); 
    } 
} 

chat = (function() { 
    var users = []; 

    return { 
     "add": function(client) { 
      users.push(client); 
     }, 
     "hasUser": function(client) { 
      return users.some(function(user) { 
       return user === client; 
      }); 
     }, 
     "broadcast": function(message) { 
       users.each(function(user) { 
        user.clientMessage(message); 
       }); 
     } 
    } 
}()); 

// client.js 
$(function() { 
    now.joinChat($.cookie("login")); 

    $("#send").click(function() { 
     now.serverMessage($(this).data("message")); 
    }); 

    now.clientMessage = function(message) { 
     $("#messages").append($("<span></span>").text(message)); 
    } 

}); 
+0

"इसे सॉकेट कनेक्शन के संदर्भ में सर्वर पर संग्रहीत करें" क्या आप इस पर एक उदाहरण दे सकते हैं यह करने के लिए ? –

+0

@runrunforest now.js यह आपके लिए कर सकता है। मैं एक उदाहरण लिखूंगा। आप socket.io के साथ ऐसा ही कर सकते हैं, आप अपने वेबसाइकिल कार्यान्वयन के साथ ऐसा ही कर सकते हैं, केवल खुद को किरकिरा विवरण लिखना होगा। – Raynos

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