उपयोगकर्ता प्रमाणीकरण आपके आवेदन तक पहुंच प्राप्त करने का प्रयास करने वाले उपयोगकर्ता की पहचान सत्यापित करने की प्रक्रिया है। इसमें उपयोगकर्ता की प्रामाणिकता की पुष्टि करने के लिए क्रेडेंशियल्स को अधिकृत और स्थानांतरित करना शामिल है।
आप कुछ ही चरणों में एक्सप्रेस, बीक्रिप्ट और मोंगोडीबी का उपयोग करके Node.js में एक साधारण उपयोगकर्ता प्रमाणीकरण मॉडल लागू कर सकते हैं।
चरण 1: विकास पर्यावरण की स्थापना
सबसे पहले, एक प्रोजेक्ट फ़ोल्डर बनाएं और सीडी इसमें चलकर:
mkdir उपयोगकर्ता-प्रमाणीकरण
सीडी प्रयोक्ता प्रमाणीकरण
इसके बाद, अपने प्रोजेक्ट डायरेक्टरी में npm को इनिशियलाइज़ करें:
npm init -y
-यो ध्वज npm को इनिशियलाइज़ करता है और आपका बनाता है पैकेज.जेसन अपने सभी डिफ़ॉल्ट के साथ फ़ाइल।
इस उपयोगकर्ता प्रमाणीकरण मॉडल के लिए कुछ निर्भरताओं की आवश्यकता होती है।
वे सम्मिलित करते हैं:
- अभिव्यक्त करना: एक्सप्रेस एक Node.js ढांचा है जो वेब और मोबाइल एप्लिकेशन के लिए सुविधाओं का एक मजबूत सेट प्रदान करता है। यह Node.js के साथ बैकएंड एप्लिकेशन बनाना आसान बनाता है।
- Bcrypt: bcrypt एक npm पैकेज है जो bcrypt पासवर्ड हैशिंग फ़ंक्शन को लागू करता है। यह आपको सादे पासवर्ड स्ट्रिंग्स से हैश बनाने की अनुमति देता है।
- नेवला: नेवला एक MongoDB ऑब्जेक्ट डेटा मॉडलिंग लाइब्रेरी है। यह आपके ऐप और मोंगोडीबी डेटाबेस के बीच बातचीत को सरल बनाता है।
- dotenv: dotenv एक शून्य-निर्भरता पैकेज है जो पर्यावरण चर को a. से लोड करता है .env फ़ाइल में प्रक्रिया.env.
- सत्यापनकर्ता: सत्यापनकर्ता एक पैकेज है जिसमें विभिन्न स्ट्रिंग सत्यापन कार्य होते हैं।
- बॉडी-पार्सर: बॉडी-पार्सर पैकेज आपके हैंडलर्स से पहले एक मिडलवेयर में अनुरोध निकायों को पार्स करता है।
संकुल को चलाकर स्थापित करें:
NPM इंस्टॉल एक्सप्रेस bcrypt नेवला dotenv सत्यापनकर्ता तन-पार्सर
अगला, एक बनाएं app.js अपने प्रोजेक्ट की रूट डायरेक्टरी में फाइल करें और एक बेसिक एक्सप्रेस सर्वर बनाने के लिए नीचे दिए गए कोड ब्लॉक को जोड़ें:
// ऐप.जेएस
स्थिरांक एक्सप्रेस = ज़रूरत होना('अभिव्यक्त करना');
स्थिरांक ऐप = एक्सप्रेस ();
स्थिरांक बॉडीपार्सर = ज़रूरत होना("बॉडी-पार्सर");स्थिरांक बंदरगाह = 3000;
अनुप्रयोग।उपयोग(बॉडीपार्सर.जेसन());
अनुप्रयोग।उपयोग(बॉडीपार्सर.urlencoded({ विस्तारित: सच }));
app.listen (पोर्ट, ()=>{
सांत्वना देना।लकड़ी का लट्ठा(`ऐप पोर्ट पर सुन रहा है ${पोर्ट}`);
});
यह कोड एक्सप्रेस फ़ंक्शन को कॉल करके एक एक्सप्रेस एप्लिकेशन इंस्टेंस बनाता है। यह तब का उपयोग करता है बॉडी-पार्सर आने वाले अनुरोध निकायों को पार्स करने के लिए मिडलवेयर। फिर यह एक्सप्रेस इंस्टेंस की सुनने की विधि को कॉल करके और पोर्ट वेरिएबल को एक तर्क के रूप में पास करके पोर्ट 3000 पर ट्रैफ़िक सुनना शुरू कर देता है।
चरण 2: अपने एप्लिकेशन को डेटाबेस से कनेक्ट करना
अपने प्रोजेक्ट की रूट डायरेक्टरी में, a. बनाएं .env फ़ाइल करें और उसमें अपने MongoDB क्रेडेंशियल स्टोर करें। यह आपके डेटाबेस क्रेडेंशियल्स को कोड में उजागर करने से बचाता है जो दुर्भावनापूर्ण उपयोगकर्ताओं को आपके डेटाबेस तक पहुंच प्रदान कर सकता है।
इसके बाद, अपने पर नेविगेट करें app.js फ़ाइल और आयात नेवला:
स्थिरांक नेवला = ज़रूरत होना("मोंगोज़");
फिर, आयात कॉल करें दोतेनव और कॉल करें कॉन्फ़िग उस पर विधि:
ज़रूरत होना("दोतेनव"कॉन्फिग ();
कॉल कर रहा है कॉन्फ़िग विधि चालू दोतेनव में पर्यावरण चर लोड करता है प्रक्रिया.env.
अंत में, कनेक्ट विधि को कॉल करें नेवला और अपने मोंगोडीबी यूआरआई को तर्क के रूप में पास करें:
mongoose.connect (process.env. MONGODB_URI)। तब (() => {
कंसोल.लॉग('डेटाबेस से सफलतापूर्वक जुड़ा')
})
चरण 3: उपयोगकर्ता मॉडल बनाना
अपने प्रोजेक्ट की रूट डायरेक्टरी में, "मॉडल"फ़ोल्डर; यह वह जगह है जहाँ आप अपना नेवला मॉडल संग्रहीत करेंगे:
एमकेडीआईआर मॉडल
अगला, एक "बनाएं"उपयोगकर्ता मॉडल"फ़ाइल और निम्नलिखित आयात जोड़ें:
स्थिरांक नेवला = ज़रूरत होना('नेवला')
स्थिरांक {ईमेल} = ज़रूरत होना('सत्यापनकर्ता')
ईमेल है एक सत्यापन कार्य है जो लौटाता है सच यदि दी गई स्ट्रिंग एक ईमेल है। आपको अपने उपयोगकर्ता मॉडल में नेवला सत्यापन लागू करने के लिए इसकी आवश्यकता होगी।
इसके बाद, निम्नलिखित कोड को अपने में जोड़ें उपयोगकर्ता मॉडल फ़ाइल:
// मॉडल/उपयोगकर्ता मॉडल
स्थिरांक userSchema = mongoose. स्कीमा({
ईमेल: {
प्रकार: डोरी,
आवश्यक: [सच, 'ईमेल की जरूरत है'],
मान्य करें: {
सत्यापनकर्ता: ईमेल है,
संदेश: सहारा => `${props.value} वैध ईमेल नहीं है`
}
},पासवर्ड: {
प्रकार: डोरी,
आवश्यक: [सच, 'पासवर्ड की आवश्यकता है'],
मान्य करें: {
सत्यापनकर्ता: समारोह (मूल्य) {
वापसी मान.लंबाई>= 6
},
संदेश: () =>'पासवर्ड कम से कम छह अक्षर लंबा होना चाहिए'
}
}
})
मापांक.निर्यात = mongoose.model ('उपयोगकर्ता', उपयोगकर्ता स्कीमा)
उपरोक्त कोड a. बनाता है उपयोगकर्तास्कीमा वेरिएबल जो के मान को स्टोर करता है नेवला योजना तरीका। नेवला। स्कीमा विधि एक MongoDB संग्रह के गुणों को मैप करती है और इसके भीतर दस्तावेज़ों के आकार को परिभाषित करती है। नेवला स्कीमा में दो गुण होते हैं—एक ईमेल और एक पासवर्ड-जो आपकी प्रमाणीकरण आवश्यकताएँ होंगी।
ईमेल गुण एक स्ट्रिंग प्रकार है और इसमें है आवश्यक सच पर सेट। साथ में त्रुटि संदेश, "ईमेल आवश्यक है," प्रदर्शित होगा यदि अनुरोध निकाय में कोई शामिल नहीं है ईमेल संपत्ति। अंत में, नेवला कस्टम सत्यापन का उपयोग करते हुए, सत्यापनकर्ता संपत्ति संदर्भित करता है ईमेल है समारोह। ईमेल के रूप में स्ट्रिंग की वैधता के आधार पर वह फ़ंक्शन सही या गलत लौटाता है। तब संदेश संपत्ति ईमेल मान लेती है (रंगमंच की सामग्री) और एक सार्थक त्रुटि संदेश का निर्माण करता है।
पासवर्ड गुण एक आवश्यक स्ट्रिंग प्रकार है जिसमें एक त्रुटि संदेश होता है जिसमें लिखा होता है "पासवर्ड आवश्यक है"। सत्यापनकर्ता फ़ंक्शन एक अजीब है जो पासवर्ड कम से कम छह वर्ण लंबा होने पर सत्य लौटाता है।
अंतिम पंक्ति कॉल करके एक नेवला मॉडल बनाती और निर्यात करती है नमूना विधि चालू नेवला मॉडल का नाम पास करें (उपयोगकर्ता) पहले तर्क और एक स्कीमा के रूप में (उपयोगकर्तास्कीमा) दूसरे तर्क के रूप में।
चरण 4: साइन-इन और साइन-अप रूट लागू करना
अपने प्रोजेक्ट की रूट डायरेक्टरी में, a. बनाएं मार्गों फ़ोल्डर:
एमकेडीआईआर मार्ग
अपने मार्ग फ़ोल्डर में, एक बनाएँ userRoutes.js फ़ाइल और निम्नलिखित आयात जोड़ें:
// मार्ग/userRoutes.js
स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
स्थिरांक उपयोगकर्ता = ज़रूरत होना("../मॉडल/उपयोगकर्ता मॉडल");
स्थिरांक बीक्रिप्ट = ज़रूरत होना("बीक्रिप्ट");
को कॉल करके एक एक्सप्रेस राउटर इंस्टेंस बनाएं रूटर विधि चालू अभिव्यक्त करना:
स्थिरांक राउटर = एक्सप्रेस। राउटर ();
इसके बाद, नीचे दिए गए कोड ब्लॉक को अपने में जोड़कर अपना साइन-अप मार्ग बनाएं userRoute.js फ़ाइल:
राउटर पोस्ट ("/sign-up", async (req, res) => {
प्रयत्न {
// req.body ऑब्जेक्ट से ईमेल और पासवर्ड निकालें
स्थिरांक {ईमेल, पासवर्ड} = req.body;// जांचयदि ईमेल है पहले से ही मेंउपयोग
होने देना उपयोगकर्ता मौजूद है = इंतजार User.findOne ({ईमेल});अगर (उपयोगकर्ता मौजूद है) {
res.status(401.json ({संदेश: "ईमेल पहले से ही है उपयोग.&उद्धरण; });
वापसी;
}// नमक के दौर को परिभाषित करें
स्थिरांक सॉल्टराउंड्स = 10;// हैश पासवर्ड
bcrypt.hash (पासवर्ड, साल्टराउंड, (गलती, हैश) => {
यदि (गलती) फेंकनानयागलती("आंतरिक सर्वर गलती");// सृजन करना एक नयाउपयोगकर्ता
होने देना उपयोगकर्ता = नया उपयोगकर्ता({
ईमेल,
पासवर्ड: हैश,
});
// उपयोगकर्ता को डेटाबेस में सहेजें
user.save ()। तब (() => {
रेस.जेसन ({संदेश: "उपयोगकर्ता सफलतापूर्वक बनाया गया", उपयोगकर्ता});
});
});
} पकड़ (गलती) {
वापसीरेस।दर्जा(401)।भेजना(ग़लती होना।संदेश);
}
});
ऊपर दिए गए कोड ब्लॉक में, सबसे पहले, आपने ईमेल और पासवर्ड को से डी-स्ट्रक्चर किया है अनुरोध शरीर वस्तु। फिर, जांचें कि क्या कोई उपयोगकर्ता पहले से ही ईमेल का उपयोग कर रहा है क्योंकि यह प्रत्येक उपयोगकर्ता के लिए अद्वितीय होना चाहिए। यदि ईमेल का पहले ही उपयोग किया जा चुका है, तो आप 401 स्थिति कोड के साथ कोड निष्पादन को वापस कर देते हैं और रोक देते हैं।
एक डेटाबेस में सादा पासवर्ड संग्रहीत करना एक बहुत बड़ा सुरक्षा खतरा है क्योंकि दुर्भावनापूर्ण हैकर्स डेटाबेस तक पहुंच प्राप्त कर सकते हैं। आपको अपने डेटाबेस में पासवर्ड को सॉर्ट करने से पहले हैश करना चाहिए, इसलिए यदि कोई हैकर उन्हें खोज लेता है, तो भी उपयोगकर्ताओं के लिए कोई जोखिम नहीं होना चाहिए। हैशिंग किसी दिए गए "कुंजी" को दूसरे मान में बदलने की प्रक्रिया है। हैशिंग एक तरफ़ा फ़ंक्शन है, जिसका अर्थ है कि आप एन्क्रिप्शन के विपरीत, हैड वाले से मूल मान प्राप्त नहीं कर सकते।
bcrypt का उपयोग करके, आपने हैश किया bcrypt पर हैश विधि को कॉल करके अपना उपयोगकर्ता पासवर्ड। हैश विधि में तीन पैरामीटर होते हैं: हैश की जाने वाली स्ट्रिंग, सॉल्ट राउंड और कॉलबैक फ़ंक्शन। आप उपयोगकर्ता पासवर्ड, आपके द्वारा पहले बनाए गए नमक राउंड वैरिएबल और कॉलबैक पास करते हैं।
सॉल्ट राउंड एक एकल bcrypt हैश की गणना के लिए आवश्यक समय को संदर्भित करता है। नमक का दौर जितना अधिक होगा, हैशिंग का दौर उतना ही अधिक होगा।
यदि हैश विधि एक त्रुटि फेंकता है, तो आप "आंतरिक सर्वर त्रुटि" फेंकते हैं। इसके अलावा, आप पासवर्ड प्रॉपर्टी को सफल हैश पर सेट करते हैं और सेव मेथड को कॉल करके इसे अपने डेटाबेस में सेव करते हैं उपयोगकर्ता उदाहरण।
इसके बाद, नीचे दिए गए कोड ब्लॉक को अपने में जोड़कर अपना साइन-इन मार्ग बनाएं userRoute.js फ़ाइल:
राउटर पोस्ट ("/sign-in", async (req, res) => {
प्रयत्न {
// req.body ऑब्जेक्ट से ईमेल और पासवर्ड निकालें
स्थिरांक {ईमेल, पासवर्ड} = req.body;// जांचयदिउपयोगकर्तामौजूदमेंडेटाबेस
होने देना उपयोगकर्ता = इंतजार User.findOne ({ईमेल});अगर (! उपयोगकर्ता) {
वापसी res.status (401)। जेसन ({ संदेश: "अवैध प्रत्यय पत्र" });
}// पासवर्ड की तुलना करें
bcrypt.compare (पासवर्ड, उपयोगकर्ता। पासवर्ड, (गलती, परिणाम) => {
अगर (परिणाम) {
वापसी res.status (200).json({ संदेश: "उपयोगकर्ता ने सफलतापूर्वक लॉग इन किया" });
}सांत्वना देनालॉग (गलती);
वापसी res.status (401)। जेसन ({ संदेश: "अवैध प्रत्यय पत्र" });
});
} पकड़ (गलती) {
रेस।दर्जा(401)।भेजना(ग़लती होना।संदेश);
}
});
मापांक.निर्यात = राउटर;
ऊपर दिए गए कोड ब्लॉक में, सबसे पहले, आप ईमेल और पासवर्ड को से डी-स्ट्रक्चर करते हैं अनुरोध शरीर वस्तु। फिर, आप जांचते हैं कि कोई उपयोगकर्ता आपके डेटाबेस में मौजूद है या नहीं। यदि उपयोगकर्ता आपके डेटाबेस में मौजूद नहीं है, तो आप 401 स्थिति कोड के साथ वापस आते हैं।
इसके बाद, bcrypt की तुलना विधि का उपयोग करते हुए, उपयोगकर्ता द्वारा प्रदान किया गया पासवर्ड और हैशेड पासवर्ड जो आपने अपने डेटाबेस से प्राप्त किया है, पास करें। पुष्टि करने के लिए दोनों की तुलना करें कि क्या वे मेल खाते हैं। यदि पासवर्ड मेल खाते हैं, तो आप एक 200 स्थिति कोड और एक सफलता संदेश लौटाते हैं। अन्यथा आप एक 401 स्थिति कोड और एक त्रुटि संदेश लौटाते हैं।
अंत में, आयात रूटर तुम्हारे अंदर app.js फ़ाइल और इसे एप्लिकेशन-स्तरीय मिडलवेयर के रूप में उपयोग करें।
यह आपके उपयोगकर्ता प्रमाणीकरण मॉडल को पूरा करता है; अब, उपयोगकर्ता सुरक्षित रूप से साइन-अप कर सकते हैं और आपके एप्लिकेशन में साइन इन कर सकते हैं।
उपयोगकर्ता प्रमाणीकरण का महत्व
उपयोगकर्ता प्रमाणीकरण सुनिश्चित करता है कि केवल वैध उपयोगकर्ता ही आपके आवेदन तक पहुंच प्राप्त कर सकते हैं। यदि आपका डेटा किसी भी तरह से व्यक्तिगत या निजी है, तो आपको अनधिकृत उपयोगकर्ताओं को एक्सेस प्राप्त करने से रोकने के लिए कदम उठाने चाहिए।