2013-10-04 6 views
14

मैं MEAN स्टैक (MongoDB, एक्सप्रेस, AngularJS, और node.js) पर एक वेब ऐप विकसित कर रहा हूं। मैं एक लॉगिन प्रणाली विकसित कर रहा हूं, और इसमें कुछ कोणीय मार्ग भी संरक्षित होंगे ताकि केवल लॉग-इन उपयोगकर्ता ही उन्हें एक्सेस कर सकें। मैं इस के आर्किटेक्चर तक पहुंचने का सबसे अच्छा तरीका सोचने की कोशिश कर रहा हूं।MEAN स्टैक पर लॉगिन सिस्टम के लिए आर्किटेक्चर?

मैं वर्तमान कार्यप्रवाह में सोच रहा हूँ:

  • उपयोगकर्ता AngularJS रूप है, जो एक एक्सप्रेस समाप्ति बिंदु को एक HTTP POST भेजता है के माध्यम से लॉग करता है। एंडपॉइंट उपयोगकर्ता को डेटाबेस के खिलाफ मान्य करता है, और एक ओथ टोकन के साथ-साथ कुकी के साथ प्रतिक्रिया देता है। बाद में सत्यापन के लिए दोनों को मोंगो डेटाबेस में संग्रहीत किया जाता है।
  • एक बार AngularJS लॉगिन प्रतिक्रिया प्राप्त करता है, यह एनजी-कुकीज़ का उपयोग करके प्राप्त कुकी संग्रहीत करता है, और उपयोगकर्ता सेवा में OAuth टोकन संग्रहीत करता है।
  • हर बार जब रूट एंगुलरजेएस में बदलता है, तो उपयोगकर्ता सेवा का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कुकी अभी भी मोंगो डेटाबेस में कुकीज़ की तुलना करके वैध है (यह एंगुलर के संकल्प का उपयोग करके एक एपीआई कॉल होगा ... क्या यह होगा एक ध्यान देने योग्य अंतराल बनाएँ?)
  • जब कोई उपयोगकर्ता "लॉग आउट" या कुकी समाप्त हो जाता है, तो कुकी और ओथ टोकन दोनों डेटाबेस से हटा दिए जाते हैं और अब मान्य नहीं होंगे।

क्या यह दृष्टिकोण समझ में आता है? क्या यह सुरक्षित है, और यह निष्पादन में अपेक्षाकृत कुशल/त्वरित होगा?

+1

समझ में आता है, आप सत्रों का भी उपयोग कर सकते हैं, इसलिए जब भी आप मार्ग बदलते हैं तो आप डीबी की जांच नहीं कर रहे हैं। – tymeJV

+0

क्या सत्र एक्सप्रेस द्वारा प्रबंधित किए जाएंगे? और फिर मार्ग परिवर्तन पर मैं अभी भी एक एपीआई कॉल करूँगा लेकिन यह डीबी की जांच नहीं करेगा? – Jakemmarsh

+2

हाँ, 'req.session' - इस पोस्ट को जांचें: http: // stackoverflow।कॉम/प्रश्न/14218725/सत्र-के-सत्र-इन-एक्सप्रेस-जेएस - या आप एचटीएमएल 5 'सत्र स्टोरेज' – tymeJV

उत्तर

8

मैंने एक्सप्रेस के ऑथ उदाहरण के साथ अपने मूल वर्कफ़्लो को जोड़कर समाप्त किया, here देखा। यह निम्नानुसार है:

  • जब उपयोगकर्ता प्रारंभ में ऐप लोड करता है, तो एक एक्सप्रेस एंडपॉइंट पर एक http कॉल किया जाता है जो जांचता है कि उपयोगकर्ता के लिए कोई सत्र पहले से मौजूद है या नहीं। यदि ऐसा है, तो उपयोगकर्ता $rootScope में संग्रहीत है और लॉग इन माना जाता है।
  • किसी भी समय AngularJS मार्ग बदलता है, वही अंतराल का उपयोग किया जाता है। रूट सुरक्षा को here वर्णित तरीके से निर्दिष्ट किया गया था। यदि एंडपॉइंट कभी लौटाता है कि कोई सत्र मौजूद नहीं है, तो $rootScope.user अनसेट (यदि यह होना आवश्यक है) है, और उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट किया गया है।
  • जब लॉगिन फॉर्म संसाधित होता है, तो यह एक्सप्रेस एंडपॉइंट पर पोस्ट करता है। एंडपॉइंट उपयोगकर्ता को mongoDB (यदि यह मौजूद है) से पुनर्प्राप्त करता है, और पासवर्ड हैश करने का प्रयास करता है। यदि यह एक मैच है, तो उपयोगकर्ता का सत्र सेट किया जाता है, जो मोंगो डीबी में संग्रहीत होता है, और एंडपॉइंट user ऑब्जेक्ट देता है (जिसे पहले उल्लेख किया गया $ रूटस्कोप में स्टोर करने के लिए उपयोग किया जाता है)।
  • किसी भी समय किसी और एंडपॉइंट्स तक पहुंचने के लिए, फ़ंक्शंस को पहले restrict फ़ंक्शन के माध्यम से पारित किया जाता है जो सुनिश्चित करता है कि क्लाइंट को कोई भी डेटा भेजने से पहले एक सत्र मौजूद है। यदि कोई सत्र मौजूद नहीं है, तो यह 401 देता है, जिसे this HTTP interceptor का उपयोग करकेका उपयोग करके कोणीय पक्ष पर संभाला जाता है और लॉगिन स्क्रीन पर रीडायरेक्ट किया जाता है।
  • जब उपयोगकर्ता कोणीय पक्ष पर "लॉग आउट" पर क्लिक करता है, तो सत्र को अनसेट और मोंगो डीबी से हटा दिया जाता है, $rootScope.user शून्य पर सेट होता है, और उपयोगकर्ता को वापस पृष्ठ पर रीडायरेक्ट किया जाता है।
संबंधित मुद्दे