2017-05-13 11 views
6

के लिए क्लाइंट साइड ऐप में उपयोगकर्ता-आईडी संग्रहीत करना मेरे पास एक नोड-एक्सप्रेस आरईएसटी एपीआई है जहां मैं उपयोगकर्ता नियंत्रक को एक GET अनुरोध कर सकता हूं - /users/:id - जहां :id डेटाबेस में संग्रहीत उपयोगकर्ता-आईडी नंबर है। मेरे पास एक रिएक्ट-रेडक्स क्लाइंट साइड ऐप भी है जो एपीआई को कॉल करता है। अनुरोध करने के लिए, क्लाइंट ऐप को उपयोगकर्ता-आईडी तक पहुंच की आवश्यकता है, लेकिन मुझे वर्तमान में क्लाइंट पक्ष पर उपयोगकर्ता-आईडी को स्टोर करने का सबसे अच्छा तरीका नहीं है।एपीआई अनुरोध

अतिरिक्त संदर्भ के लिए, मेरा एपीआई क्लाइंट को JWT token लॉगिन पर भेजता है जो उपयोगकर्ता-आईडी रखता है; क्लाइंट ऐप localStorage में टोकन बचाता है। जब ग्राहक अनुरोध करता है, तो एपीआई सत्यापित करता है कि डीकोडेड टोकन में उपयोगकर्ता-आईडी क्लाइंट को प्रतिक्रिया भेजने से पहले यूआरएल में मौजूद आईडी से मेल खाता है।

मैं दो संभावित समाधान देखने: ग्राहक पर

  1. डिकोड जेडब्ल्यूटी टोकन और एपीआई कॉल करने के लिए उपयोगकर्ता के आईडी टोकन में संग्रहीत का उपयोग करें। मुझे लगता है कि यह एक संभावित सुरक्षा जोखिम है, क्योंकि मुझे विश्वास है कि मुझे क्लाइंट ऐप पर रहस्य संग्रहित करने की आवश्यकता होगी। साथ ही, जो भी टोकन है उसे उपयोगकर्ता की जानकारी तक पहुंच प्राप्त हो सकती है।
  2. एपीआई उपयोगकर्ता-आईडी प्रमाणीकरण पर भेजता है, और ग्राहक इसे localStorage पर संग्रहीत करता है। (मुझे लगता है कि रेडक्स स्टोर में इसे संग्रहीत करना काम करेगा क्योंकि उपयोगकर्ता रीफ्रेश कर सकता है, उपयोगकर्ता-आईडी की स्थिति साफ़ कर सकता है)। मेरी समझ यह है कि यह सबसे अच्छा अभ्यास नहीं है, क्योंकि मुझे इस दृष्टिकोण को लेकर कई अन्य क्लाइंट साइड ऐप्स नहीं दिखते हैं।

कौन से दो में से एक एक बेहतर समाधान है, या फिर एक और दृष्टिकोण है कि मैं पर विचार नहीं कर रहा हूँ है?

उत्तर

1

आप # 1 विकल्प के बारे में सही हो सकता है। टोकन क्लाइंट-साइड कभी भी डीकोड न करें। इसके लिए क्लाइंट-साइड कोड को "गुप्त" जानने की आवश्यकता होगी, जो इसे आपके जावास्क्रिप्ट को देखकर किसी को भी उजागर करेगा।

विकल्प # 2 अच्छा है, यह मानते हुए कि आप अभी भी सुरक्षा उद्देश्यों के लिए हर अनुरोध के साथ टोकन भेजते हैं। भंडारण के लिए, हाँ आपको इसे कुकी में या स्थानीय स्टोरेज में स्टोर करना होगा, या जैसा कि आप कहते हैं कि यह ताज़ा करने पर खो जाएगा।

क्लाइंट-साइड कोड में आईडी प्राप्त करने के लिए, अपने क्लाइंट-साइड कोड को कुकी/लोकलस्टोरेज से पढ़ें। इसके लिए पुस्तकालय हैं; प्रतिक्रिया-कुकी कुकीज़ को पढ़ती है, उदाहरण के लिए। या तो आप इसे तब तक कर सकते हैं जब आपको इसे एक्सेस करने की आवश्यकता हो, या आप प्रारंभिक पृष्ठ लोड के दौरान इसे एक बार पढ़ सकते हैं, और उसके बाद इसे Redux store में भेज सकते हैं।

0

अपने /users/:id endpoint में आप देखने के लिए अगर एक :id प्रदान की गई थी और उसके बाद यदि नहीं, अन्यथा अपने JWT टोकन से आईडी निकालने id जिसमें API कॉल में पारित किया गया था का उपयोग कर सकते हैं।

हैं कि स्वीकार्य नहीं है, तो आप विकल्प # 2 का उपयोग लेकिन का उपयोग sessionStoragelocalStorage के बजाय

+0

आपके पहले विकल्प का जवाब: क्या यह आरईएसटी एपीआई सम्मेलनों के खिलाफ नहीं होगा? असल में यदि कोई आईडी प्रदान नहीं की जाती है, जो '/ users /' जैसा दिखाई देगी, तो आप कहेंगे कि उसे टोकन से आईडी प्राप्त करनी चाहिए, लेकिन '/ उपयोगकर्ता /' पर पहुंचने से संकेत मिलता है कि ग्राहक सभी उपयोगकर्ताओं की सूची प्राप्त करना चाहता है । – Nahro

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