37

मैंने एक सिंगल पेज एप प्रोटोटाइप विकसित किया है जो फ्रंट एंड पर बैकबोन का उपयोग कर रहा है और इसके डेटा के लिए सर्वर पर पतली रीस्टफुल एपीआई से उपभोग करने जा रहा है।एकल पृष्ठ ऐप पर उपयोगकर्ताओं के लिए प्रमाणीकरण?

भारी सर्वर साइड अनुप्रयोग विकास (php और अजगर) से आ रहा है, मैं वास्तव में एक मोटी ग्राहक के पक्ष MVC के साथ नए विभिन्न डिजाइन दृष्टिकोण का आनंद लिया है, लेकिन कैसे सबसे अच्छा कौन से लॉग इन प्रमाणीकृत उपयोगकर्ताओं के लिए एप्लिकेशन को प्रतिबंधित करने पर भ्रमित कर रहा हूँ।

मैं ऐप को लॉगिन के पीछे स्वयं रखना पसंद करता हूं और साइट के मूल लॉगिन के अतिरिक्त अंततः अन्य प्रकार के लॉगिन (ओपनिड, एफबी कनेक्ट, आदि) को भी लागू करना चाहता हूं। मैं अस्पष्ट हूं कि यह कैसे किया जाता है और खोज रहा है - हालांकि जानकारी खोजने में असफल रहा जिसने मुझे स्पष्ट किया।

बड़ी तस्वीर में, उपयोगकर्ताओं को पंजीकृत करने के लिए वर्तमान सर्वोत्तम अभ्यास क्या है और उन्हें अपने एकल पृष्ठ ऐप का उपयोग करने के लिए लॉगिन करने की आवश्यकता है?

एक बार उपयोगकर्ता लॉग इन होने के बाद, एपीआई अनुरोध प्रमाणित कैसे हैं? क्या मैं एक सत्र स्टोर कर सकता हूं लेकिन मैं एपीआई कॉल में इस सत्र के लिए कैसे पता लगा सकता हूं या क्या कोई टोकन है जिसे मुझे प्रत्येक एपीआई कॉल में पास करना है? इसके लिए कोई जवाब बहुत सराहना की जाएगी!

+2

आखिरकार आपने क्या किया? यदि मौजूदा उत्तरों में से कोई एक हल हो गया है या अपना स्वयं का समाधान जोड़ता है तो कृपया एक उत्तर चुनें? – tgkprog

उत्तर

7

हम django कुकी-आधारित प्रमाणीकरण का उपयोग करते हैं और लॉगिन और सिंगल-पेज-एप के लिए एक अलग पृष्ठ है। हमारे उपयोग के मामले के लिए बहुत अच्छी तरह से काम करता है। हमने बैकबोन-आधारित सत्र प्रबंधन प्रणाली का उपयोग किया है जिसे मैंने यहां वर्णित किया है: backbone.js - handling if a user is logged in or not

+1

मैं जो कुछ जुड़ा हुआ है उसके समान कुछ करता हूं। मेरे पास एक मॉडल है जो पूरी तरह प्रमाणीकरण (लॉगिन/लॉगआउट) के साथ सौदा करता है, सत्यापित करता है कि सर्वर-साइड पर फिर प्रतिक्रिया भेजें।सफलता या त्रुटि कॉलबैक तब एक घटना भेजता है जिस पर मेरा ऐप और विचार सुन रहे हैं। सर्वर से रिटर्न पर, मैं एक एन्क्रिप्टेड कुकी सत्र भेजता हूं जिसे मैं प्रत्येक कॉल के साथ उपयोग करता हूं ताकि यह सत्यापित किया जा सके कि वे प्रमाणीकृत हैं। – jmk2142

+1

@orangewarp: जो आपने वर्णन किया है वह बहुत कुछ लगता है (अगर बिल्कुल नहीं) जैसा हमें चाहिए। हम knockout.js का उपयोग कर रहे हैं, backbone.js नहीं। क्या कोई तरीका है कि आप अपने समाधान को कैसे कार्यान्वित करते हैं, इस बारे में अधिक जानकारी प्रदान कर सकते हैं? शायद कुछ उदाहरण कोड? धन्यवाद! – lmttag

4

हम Angular.js का उपयोग कर रहे हैं और लॉगिन के लिए एक अलग पृष्ठ भी है। अलग पृष्ठ एक अलग एकल पृष्ठ (और सुरक्षित) एप्लिकेशन लोड करता है, जो उपयोगकर्ता को http XHR अनुरोध का उपयोग करके सर्वर को कॉल करता है, उपयोगकर्ता नाम और पासवर्ड भेजता है। यदि सर्वर ने प्रमाण-पत्र प्रमाणित किए हैं, तो जावास्क्रिप्ट कोड एक कुकी सेट करता है। इस कुकी को 'दूसरी तरफ', अर्थात्, गैर-सुरक्षित एप्लिकेशन से पढ़ा जा सकता है। कुकी में हम केवल उपयोगकर्ता नाम और निश्चित रूप से, कोई पासवर्ड या अन्य सुरक्षित जानकारी डालते हैं। तो हम कुछ नहीं दिखा सकते हैं 'लियो नहीं? लॉग-इन 'गैर-सुरक्षित ऐप पर।

केवल बात नोट करने के लिए कोणीय की कुकी तंत्र ओवरराइड करने के लिए एक अनिश्चित समाप्ति सेट करने के लिए है और सबसे महत्वपूर्ण, रूट पथ:

$document[0].cookie = 'username=' + escape($scope.userName) + ";expires=Thu, 01 Jan 2970 00:00:00 GMT; Path=/"; 
7

सबसे RESTful तरह से मैं OAuth क्लाइंट साख प्रवाह पर आधारित है देखा है, मूल रूप से एक/टोकन एंडपॉइंट जो आप उपयोगकर्ता नाम/पासवर्ड पोस्ट करते हैं, जिससे इस सत्र के लिए एक्सेस टोकन लौटाता है। उसके बाद प्रत्येक AJAX अनुरोध टोकन के साथ Authorization भालू शीर्षलेख जोड़ता है। आप टोकन को ग्लोबल वैरिएबल में स्टोर कर सकते हैं ताकि पेज को रीफ्रेश/बंद होने तक इसे चारों ओर रखें, स्थानीय स्टोरेज का उपयोग सत्रों या जावास्क्रिप्ट कुकीज़ के बीच उपयोगकर्ताओं को लॉग इन रखने के लिए करें। यदि आपको टोकन के विचार पसंद नहीं हैं तो आप केवल पुराने कुकी दृष्टिकोण का उपयोग कर सकते हैं जो किसी भी एजेक्स अनुरोध के साथ स्वचालित रूप से भेजता है।

फेसबुक/google आदि के लिए मैं आमतौर पर स्टैक ओवरफ्लो दृष्टिकोण का पालन करता हूं जहां मैं बाहरी उपयोगकर्ता लॉग इन को एक खाते में जोड़ता हूं। फिर एक सामान्य सामान्य सर्वर आधारित ओथ नृत्य का उपयोग करें (हालांकि आप सर्वर पर सभी अनुरोधों को थोड़ा संशोधनों के साथ AJAX अनुरोधों के साथ प्रतिस्थापित कर सकते हैं, मुझे लगता है कि यह वास्तव में बहुत अंतर नहीं करता है क्योंकि आपको वैसे भी सर्वर और सर्वर के बीच रीडायरेक्ट की आवश्यकता होती है)। मैं आम तौर पर एक फेसबुक लॉगिन के लिए एक एन्क्रिप्टेड कुकी जारी करता हूं, जिसे मैं ऊपर की तरह एक समान विधि का उपयोग करके एक टोकन में परिवर्तित करता हूं (केवल उपयोगकर्ता नाम/पासवर्ड के बजाय अनुरोध के साथ कुकी भेजें)।

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