2015-12-08 23 views
10

के माध्यम से उपयोगकर्ता प्रमाणीकरण को संभालना मैं सोच रहा था कि लोग सामान्य रूप से उपयोगकर्ता प्रमाणीकरण को रेडक्स के साथ कैसे संभालते हैं? मैं रेडक्स राउटर का उपयोग कर रहा हूं और मेरे पास बैकएंड रेल एपीआई है जो एक ऑथ टोकन के माध्यम से उपयोगकर्ता प्रमाणीकरण को संभालती है।रेडक्स और रेडक्स राउटर

जब उपयोगकर्ता साइन इन फॉर्म सबमिट करता है तो एपीआई बाद के अनुरोधों के लिए उपयोग करने के लिए ऑथ टोकन वापस कर देगा। मूल रूप से मैंने केवल एक राज्य के पेड़ में ऑथ टोकन संग्रहीत किया है और हर बार जब मैं एक एपीआई अनुरोध करने की आवश्यकता होती हूं जिसके लिए एक उपयोगकर्ता अनुरोध की आवश्यकता होती है जिसके लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता होती है, तो मैं उस ऑथ टोकन को लाने के लिए (प्रेषण, getState) का उपयोग करता हूं और फिर इसे API में शामिल करता हूं निवेदन। तो: getState()। CurrentUser.auth_token।

मुझे यकीन नहीं है कि मैं इसे सही तरीके से देख रहा हूं। कुछ लोग सर्वर साइड सत्र की तरह अनुकरण करने के लिए उपयोगकर्ता प्रमाणीकरण के लिए Redux के साथ स्थानीय स्टोरेज का उपयोग करते हैं? फिर हर बार जब एक एपीआई अनुरोध किया जाता है तो मैं सिर्फ ऑथ टोकन के लिए स्थानीय संग्रहण की जांच करता हूं और यदि वहां उपयोगकर्ता ने साइन इन किया है?

जो मैंने समाप्त किया वह जेएस-कुकीज का उपयोग कर रहा था और जब उपयोगकर्ता प्रमाणित हुआ तो कुकी.सेट किया। मेरी रूट <App /> घटक के बाद एक घटकडिडमाउंट है जो एक initAuth() क्रिया को प्रेषित करता है जो वर्तमान कुकी को यह देखने के लिए जांचता है कि यह अभी भी वैध है या नहीं। यदि ऐसा है तो यह उपयोगकर्ता को साइन इन करता है अन्यथा यह प्रमाणीकरण reducer को अपने डिफ़ॉल्ट स्थिति में रीसेट करता है। https://github.com/SpencerCDixon/Kira/blob/master/client/actions/AuthActions.js

किसी भी सुझाव या संसाधनों की बहुत सराहना की जाएगी:

यहां उपयोगकर्ता प्रमाणीकरण के साथ रेपो करने के लिए एक कड़ी है। मैंने असली दुनिया के उदाहरण और रिएक्ट राउटर ऑथ उदाहरण को अब तक देखा है। रिएक्ट राउटर उदाहरण स्थानीय स्टोरेज का उपयोग करना प्रतीत होता है, इसलिए मैं उत्सुक हूं कि यह सही तरीका है। मैंने देखा कि एक रेडक्स लोकलस्टोरेज एनपीएम पैकेज भी है।

जानना अच्छा लगेगा कि क्या मैं गलती से खुद को किसी प्रमाणीकरण हमले के लिए खोल रहा हूं या यदि इस प्रवाह तक पहुंचने का एक बेहतर तरीका है!

उत्तर

10

मैं सोच रहा था कि लोग सामान्य रूप से उपयोगकर्ता प्रमाणीकरण को रेडक्स के साथ कैसे संभालते हैं?

मैं इतनी सारी परियोजनाओं में उस स्थिति में था और मैंने एक समाधान के साथ समाप्त किया जो मुझे हर बार पसीना नहीं देता है जब मुझे अपने रिएक्ट/रेडक्स अनुप्रयोगों में प्रमाणीकरण को संभालने की आवश्यकता होती है।

मेरी परियोजनाओं में, मैं नोड.जेएस का उपयोग कर रहा हूं लेकिन यह कुछ भी नहीं बदलता है, आप किसी भी सर्वर साइड टेक्नोलॉजी का उपयोग कर सकते हैं।

समाधान

मैंने देखा है कि एक ही पृष्ठ आवेदन (SPA) में, प्रमाणीकरण तंत्र क्लाइंट-साइड पर संभाला जाता है, जैसे आपने कहा, पता चल सके कि उपयोगकर्ता एक टोकन है, इसके साथ मान्य सर्वर और फिर उस पर एक प्रासंगिक मार्ग आधार पर 'रीडायरेक्ट' करें, अब यह कोई फर्क नहीं पड़ता कि आप अपने एसपीए के लिए रिएक्ट/रेडक्स, कोणीय, एम्बर या बैकबोन का उपयोग कर रहे हैं, यह हमेशा खराब हो जाएगा।

इसलिए मैंने मुख्य एप्लिकेशन से प्रमाणीकरण (साइन अप/साइन इन) प्रक्रिया को अलग कर दिया, इसलिए जब कोई उपयोगकर्ता पहली बार अपना एप्लिकेशन लॉन्च करता है, तो सर्वर token कुकी के लिए जांच करता है, यदि उपयोगकर्ता के पास उस कुकी है अनुरोध, सर्वर इस टोकन को मान्य करता है और यदि यह मान्य है, तो क्लाइंट को मुख्य अनुप्रयोग पृष्ठ (उदाहरण के लिए index.html) पर रीडायरेक्ट करता है, यदि टोकन मान्य नहीं है या मौजूद नहीं है, तो सर्वर क्लाइंट को लॉगिन/साइन अप पेज (login.html/signup.html)।

login.html पृष्ठ मुख्य एप्लिकेशन (index.html में से एक) का हिस्सा नहीं है, वास्तव में, इसमें एक अलग कोड बेस है (बहुत कम कोड वाला हल्का है ताकि पृष्ठ को भी तेज़ लोड किया जा सके) और जब कोई उपयोगकर्ता लॉगिन करने का प्रयास करता है, सर्वर ने उस login.html पृष्ठ से उपयोगकर्ता नाम और पासवर्ड को सत्यापित किया है और यदि यह वैध प्रमाण-पत्र है, तो सर्वर उस उपयोगकर्ता के लिए token कुकी सेट करता है और उसे मुख्य एप्लिकेशन पेज (index.html) पर रीडायरेक्ट करता है जहां प्रमाणीकरण को संभालने की आवश्यकता के बिना एप्लिकेशन कोड लोड किया जा सकता है क्योंकि यदि कोई उपयोगकर्ता इस पृष्ठ को लोड करने में सक्षम था (index.html) इसका अर्थ है कि उसके पास वैध टोकन होना चाहिए।

+0

हाँ कि समझ में आता है। आपके इनपुट के लिए स्वीट धन्यवाद मैं इसकी सराहना करता हूं – spencercdixon

+1

क्या आपके पास अपने लॉगिन/साइनअप – hounded

+2

के उदाहरण के लिए गिट करने का एक लिंक है यदि मैं चाहता हूं कि मेरा ऐप उपयोगकर्ता की लॉगिन स्थिति से अवगत हो? ऐप को पूरी तरह से या आंशिक रूप से काम करना चाहिए भले ही उपयोगकर्ता प्रमाणीकृत नहीं है। –

1

मैंने अभी रेडक्स ऑथ ओपन सोर्स प्रोजेक्ट पर काम करना समाप्त कर दिया है। मैं स्थानीय स्टोरेज में टोकन संग्रहीत कर रहा हूँ। बैक एंड के लिए मैं नोड का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि आपको विचार मिल जाएगा। तो आप अनिवार्य रूप से अगर आप उपयोगकर्ता प्रमाणीकरण के लिए होगा एक अलग 'सेवा' की तरह बनाया

https://github.com/DimitriMikadze/node-redux-auth

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