एक डेवलपर के रूप में, प्रमाणीकरण के माध्यम से अपने उपयोगकर्ताओं के डेटा की सुरक्षा करना आपकी ज़िम्मेदारी है। आप Node और Postgres एप्लिकेशन में उपयोगकर्ताओं को प्रमाणित करने के लिए Passport.js का उपयोग कर सकते हैं।

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

उपयोगकर्ता तालिका बनाना

उपयोगकर्ता प्रमाणीकरण के लिए, आप एक ईमेल और एक पासवर्ड का उपयोग करेंगे। इसका मतलब है कि उपयोगकर्ता तालिका में एक ईमेल और एक पासवर्ड फ़ील्ड होना चाहिए। Psql कमांड प्रॉम्प्ट में, नोडएप नामक एक नया डेटाबेस बनाएं:

सृजन करनाडेटाबेस नोडएप;

इसके बाद, उपयोगकर्ताओं को संग्रहीत करने के लिए एक तालिका बनाएं:

सृजन करनामेज़उपयोगकर्ताओं (
आईडी INT हमेशा पहचान प्राथमिक कुंजी के रूप में उत्पन्न होता है,
ईमेल चार्ज(128),
पासवर्ड चार्ज (60)
);

यह कोड एक नई तालिका बनाएगा जिसमें ईमेल, पासवर्ड और एक ऑटो-जेनरेटेड आईडी फ़ील्ड होगा।

एक नोड सर्वर बनाना

Node.js एक सर्वर-साइड JavaScript रनटाइम वातावरण है जो हमें शीघ्रता से HTTP सर्वर बनाने की अनुमति देता है। सर्वर और विभिन्न HTTP मार्ग बनाने की प्रक्रिया को सरल बनाने के लिए, आप इसका उपयोग कर सकते हैं

instagram viewer
एक्सप्रेस, एक Node.js वेब ढांचा.

पोस्टग्रेज-ऑथ नामक एक नया फ़ोल्डर बनाने के लिए इस कमांड को चलाएँ:

mkdir postgres-auth

अगला, npm प्रारंभ करें:

npm init -y

अंत में, एक्सप्रेस स्थापित करें:

एनपीएम एक्सप्रेस स्थापित करें

अब तुम यह कर सकते हो नोड वेब सर्वर बनाएं.

नामक एक नई फ़ाइल में index.js, निम्नलिखित जोड़ें:

स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना");
स्थिरांक ऐप = एक्सप्रेस ();
ऐप.यूज़ (एक्सप्रेस.जेसन ());
app.use (एक्सप्रेस.urlencoded({ विस्तारित: सच }));
ऐप.सुनो (3000, () => सांत्वना देना.log ("पोर्ट पर सुनना 3000"));

इस कोड को चलाने से सर्वर शुरू हो जाएगा और कंसोल में निम्नलिखित लॉग इन करें:

पोर्ट 3000. पर सुन रहा है

PostgreSQL से जुड़ना

प्रति PostgreSQL से कनेक्ट करें उपयोग नोड-पोस्टग्रेज. नोड-पोस्टग्रेज एक कनेक्शन ड्राइवर है जो नोड और पोस्टग्रेज के बीच एक इंटरफेस प्रदान करता है।

एनपीएम के माध्यम से नोड-पोस्टरज स्थापित करने के लिए निम्नलिखित निष्पादित करें:

एनपीएम पीजी स्थापित करें

एक बार जब आप उस पुस्तकालय को स्थापित कर लेते हैं, तो एक नई फ़ाइल बनाएँ, जिसका नाम है डीबी.जेएस और इसे डेटाबेस से कनेक्ट करें:

स्थिरांक {ग्राहक} = ज़रूरत होना("पीजी");
स्थिरांक {उपयोगकर्ता, होस्ट, डेटाबेस, पासवर्ड, पोर्ट} = ज़रूरत होना("./dbConfig");

स्थिरांक ग्राहक = नया ग्राहक({
उपयोगकर्ता,
मेज़बान,
डेटाबेस,
पासवर्ड,
बंदरगाह,
});

क्लाइंट.कनेक्ट ();
मापांकनिर्यात = ग्राहक;

नोड-पोस्टग्रेस से क्लाइंट विधि उस डेटाबेस का विवरण लेती है जिसे आप कनेक्ट कर रहे हैं। यह प्रोग्राम अपने कनेक्शन विवरण को एक फाइल से आयात करता है जिसे कहा जाता है डीबीकॉन्फ़िग. इसलिए, वह फ़ाइल बनाएं और उसमें निम्न कोड जोड़ें:

मापांकनिर्यात = {
उपयोगकर्ता: "पोस्टग्रेज",
होस्ट: "लोकलहोस्ट",
डेटाबेस: "नोडएप",
पासवर्ड: "आपका पासवर्ड",
बंदरगाह: 5432,
};

डेटाबेस सहायक कार्य बनाएँ

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

  1. यह जांचने के लिए कि ईमेल पहले से पंजीकृत है या नहीं।
  2. उपयोगकर्ता बनाने के लिए।

लक्ष्य केवल एक उपयोगकर्ता को पंजीकृत करना है यदि वे डेटाबेस में मौजूद नहीं हैं।

नामक एक नई फ़ाइल बनाएँ हेल्पर.जेएस और डेटाबेस क्लाइंट को db.js से आयात करें:

स्थिरांक ग्राहक = ज़रूरत होना("./db.js")

इसके बाद, एक नया फ़ंक्शन जोड़ें जिसे ईमेलएक्सिस्ट () कहा जाता है:

स्थिरांक ईमेल एक्ज़िस्ट्स = अतुल्यकालिक (ईमेल) => {
स्थिरांक डेटा = इंतजार client.query ("चयन करें * उन उपयोगकर्ताओं से जहां ईमेल = $1", [
ईमेल,
]);

यदि (डेटा.रोकाउंट == 0) वापसीअसत्य;
वापसी डेटा.पंक्तियाँ[0];
};

यह फ़ंक्शन एक ईमेल लेता है और जांचता है कि यह पहले से उपयोग में है या नहीं। यह चयन खंड का उपयोग करके ऐसा करता है जो एक पंक्ति देता है जिसमें एक ईमेल फ़ील्ड होता है जो पंजीकरण उपयोगकर्ता द्वारा प्रदान किए गए मान से मेल खाता है। यदि ईमेल मौजूद नहीं है, तो यह झूठी वापसी करता है।

एक ऐसा फ़ंक्शन बनाने के लिए जो उपयोगकर्ता बनाता है, createUser() नामक फ़ंक्शन को helper.js में जोड़ें:

स्थिरांक क्रिएट यूज़र = अतुल्यकालिक (ईमेल, पासवर्ड) => {
स्थिरांक नमक = इंतजार bcrypt.genसाल्ट (10);
स्थिरांक हैश = इंतजार bcrypt.hash (पासवर्ड, नमक);

स्थिरांक डेटा = इंतजार क्लाइंट.क्वेरी (
"उपयोगकर्ताओं (ईमेल, पासवर्ड) मूल्यों में प्रवेश करें ($1, $2) रिटर्निंग आईडी, ईमेल, पासवर्ड",
[ईमेल, हैश]
);

यदि (डेटा.रोकाउंट == 0) वापसीअसत्य;
वापसी डेटा.पंक्तियाँ[0];
};

यह फ़ंक्शन ईमेल और पासवर्ड मान लेता है। यह इन विवरणों के साथ एक नई पंक्ति बनाने के लिए INSERT क्लॉज का उपयोग करता है और सफल होने पर नए बनाए गए उपयोगकर्ता को वापस कर देता है। ध्यान दें कि पासवर्ड स्टोर करने से पहले, आपको चाहिए इसे bcrypt का उपयोग करके हैश करें. पासवर्ड को सादे पाठ के रूप में संग्रहीत करना कभी भी अच्छा विचार नहीं है। अगर हैकर्स को आपके यूजर डेटाबेस तक पहुंच मिलती है तो वे आसानी से संवेदनशील जानकारी तक पहुंच सकते हैं।

इसका उपयोग शुरू करने के लिए bcryptjs स्थापित करें:

npm bcryptjs स्थापित करें

helper.js में, bcryptjs आयात करें:

स्थिरांक बीक्रिप्ट = ज़रूरत होना("बीक्रिप्टज")

Bcryptjs का उपयोग करके, डेटाबेस केवल एन्क्रिप्टेड पासवर्ड संग्रहीत करता है। इसलिए, लॉगिन के दौरान, आपको उपयोगकर्ता द्वारा दिए गए प्लेन टेक्स्ट पासवर्ड और डेटाबेस में हैशेड पासवर्ड की तुलना करनी होगी। इसके लिए आप Bcryptjs द्वारा प्रदान की गई तुलना विधि का उपयोग कर सकते हैं।

मैचपासवर्ड () नामक एक फ़ंक्शन बनाएं:

स्थिरांक मैचपासवर्ड = अतुल्यकालिक (पासवर्ड, हैशपासवर्ड) => {
स्थिरांक मैच = इंतजार bcrypt.compare (पासवर्ड, हैशपासवर्ड);
वापसी मिलान
};

यह सादा पासवर्ड और हैश प्राप्त करता है और फिर यह निर्धारित करने के लिए Bcrypt.compare() का उपयोग करता है कि प्रदान किया गया पासवर्ड सही है या नहीं। यदि ऐसा है, तो यह सच हो जाता है अन्यथा, यह झूठा लौटाता है।

ये सभी फंक्शन हैं जिनका उपयोग हम डेटाबेस के साथ इंटरैक्ट करने के लिए करेंगे। अंत में उन सभी को निर्यात करना सुनिश्चित करें:

मापांक.निर्यात = {ईमेल एक्ज़िस्ट, क्रिएट यूज़र, मैचपासवर्ड};

पासपोर्ट कॉन्फ़िगर करें

पासपोर्ट एक नोड प्रमाणीकरण मिडलवेयर है जो 500 से अधिक प्रमाणीकरण रणनीतियों जैसे सामाजिक लॉगिन, JSON वेब टोकन (JWT), और ईमेल प्रमाणीकरण प्रदान करता है। हम बाद वाले का उपयोग करेंगे जो पासपोर्ट-स्थानीय रणनीति प्रदान करती है।

पासपोर्ट और पासपोर्ट-स्थानीय स्थापित करने के लिए निम्न आदेश का उपयोग करें:

npm पासपोर्ट स्थापित करें
npm पासपोर्ट-स्थानीय स्थापित करें

इसके बाद, मौजूदा उपयोगकर्ताओं को लॉगिन करने और नए उपयोगकर्ताओं को पंजीकृत करने के लिए पासपोर्ट को कॉन्फ़िगर करें।

एक नई फ़ाइल बनाकर प्रारंभ करें पासपोर्टकॉन्फिग.जेएस. फिर, पासपोर्ट स्थानीय रणनीति और आपके द्वारा अभी बनाए गए डेटाबेस सहायक कार्यों को आयात करें:

स्थिरांक स्थानीय रणनीति = ज़रूरत होना("पासपोर्ट-स्थानीय");
स्थिरांक {ईमेल एक्ज़िस्ट, क्रिएट यूज़र, मैचपासवर्ड} = ज़रूरत होना("./सहायक");

उपयोगकर्ता साइन-अप सेट करने के लिए उसी फ़ाइल में निम्नलिखित जोड़ें:

मापांकनिर्यात = (पासपोर्ट) => {
पासपोर्ट.उपयोग(
"स्थानीय-साइनअप",
नया स्थानीय रणनीति(
{
उपयोगकर्ता नाम फ़ील्ड: "ईमेल",
पासवर्ड फ़ील्ड: "पासवर्ड",
},
अतुल्यकालिक (ईमेल, पासवर्ड, हो गया) => {
प्रयत्न {
स्थिरांक उपयोगकर्ता मौजूद है = इंतजार ईमेल मौजूद है (ईमेल)

यदि (उपयोगकर्ता मौजूद) {
वापसी किया हुआ(शून्य, असत्य);
}

स्थिरांक उपयोगकर्ता = इंतजार createUser (ईमेल, पासवर्ड);
वापसी किया हुआ(शून्य, उपयोगकर्ता);
} पकड़ (गलती) {
किया (त्रुटि);
}
}
)
);
}

चूंकि पासपोर्ट-लोकल उपयोगकर्ता नाम और पासवर्ड की अपेक्षा करता है, और आप एक ईमेल का उपयोग कर रहे हैं, उपयोगकर्ता नाम फ़ील्ड को ईमेल पर सेट करें। उपयोगकर्ता या इस एप्लिकेशन का फ्रंटएंड भाग अनुरोध निकाय में ईमेल और पासवर्ड भेजेगा। हालाँकि, आपको मूल्यों को स्वयं निकालने की आवश्यकता नहीं है क्योंकि पासपोर्ट पृष्ठभूमि में इसे संभाल लेगा।

यह प्रोग्राम पहले जाँचता है कि ईमेल पहले से ही helper.js से ईमेलएक्सिस्ट्स () फ़ंक्शन का उपयोग करके लिया गया है या नहीं। यदि ईमेल डेटाबेस में मौजूद नहीं है, तो यह createUser () फ़ंक्शन के साथ एक नया उपयोगकर्ता बनाता है। अंत में, यह उपयोगकर्ता ऑब्जेक्ट देता है।

उपयोगकर्ताओं को लॉगिन करने के लिए, निम्न को पासपोर्टकॉन्फ़िग.जेएस में जोड़ें:

मापांकनिर्यात = (पासपोर्ट) => {
पासपोर्ट.उपयोग(
"स्थानीय-साइनअप",
नया स्थानीय रणनीति(
// साइन अप करें
)
);
पासपोर्ट.उपयोग(
"स्थानीय-लॉगिन",
नया स्थानीय रणनीति(
{
उपयोगकर्ता नाम फ़ील्ड: "ईमेल",
पासवर्ड फ़ील्ड: "पासवर्ड",
},
अतुल्यकालिक (ईमेल, पासवर्ड, हो गया) => {
प्रयत्न {
स्थिरांक उपयोगकर्ता = इंतजार ईमेल एक्ज़िस्ट्स (ईमेल);
यदि (! उपयोगकर्ता) वापसी किया हुआ(शून्य, असत्य);
स्थिरांक मैच = इंतजार मैचपासवर्ड (पासवर्ड, उपयोगकर्ता। पासवर्ड);
यदि (! isMatch) वापसी किया हुआ(शून्य, असत्य);
वापसी किया हुआ(शून्य, {पहचान: यूज़र आईडी, ईमेल: user.email});
} पकड़ (गलती) {
वापसी किया (त्रुटि, असत्य);
}
}
)
);
};

यहां, प्रोग्राम पहले जांचता है कि ईमेल पंजीकृत है या नहीं। यदि नहीं, तो यह झूठी वापसी करता है। यदि उसे ईमेल मिल जाता है, तो वह अपने पासवर्ड की तुलना अनुरोध वाले पासवर्ड से करता है। यदि पासवर्ड मेल खाते हैं, तो यह उपयोगकर्ता में लॉग इन करता है और उपयोगकर्ता ऑब्जेक्ट देता है।

अंतिम चरण API समापन बिंदु बनाना है:

  • पोस्ट / प्रमाणीकरण / साइनअप
  • पोस्ट / प्रमाणीकरण / लॉगिन

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

नाम की एक नई फ़ाइल में पासपोर्ट आयात और सेट करें सर्वर.जेएस:

स्थिरांक पासपोर्ट = ज़रूरत होना("पासपोर्ट");
ज़रूरत होना("./passportConfig") (पासपोर्ट);

फिर, निम्नलिखित मार्ग जोड़ें:

ऐप.पोस्ट(
"/auth/साइन अप करें",
पासपोर्ट.प्रमाणीकरण ("स्थानीय-साइनअप", { सत्र: असत्य }),
(req, res, next) => {
रेस.जेसन({
उपयोगकर्ता: req.user,
});
}
);
ऐप.पोस्ट(
"/auth/लॉग इन करें",
पासपोर्ट। प्रमाणीकरण ("स्थानीय-लॉगिन", { सत्र: असत्य }),
(req, res, next) => {
रेस.जेसन({ उपयोगकर्ता: req.user});
}
);

सफल होने पर ये दोनों मार्ग एक JSON ऑब्जेक्ट लौटाते हैं जिसमें उपयोगकर्ता होता है।

यूनिट टेस्ट का उपयोग करके अपने एपीआई की जांच करें

आप PostgreSQL एप्लिकेशन का उपयोग करके नोड एप्लिकेशन को प्रमाणित करने के लिए पासपोर्ट का उपयोग कर सकते हैं। आपने साइन अप करने और उपयोगकर्ताओं में लॉग इन करने के लिए API समापन बिंदु बनाए हैं।

जब आप एपीआई के काम करने के तरीके का परीक्षण करने के लिए पोस्टमैन जैसे आरईएसटी क्लाइंट का उपयोग कर सकते हैं, तो यूनिट परीक्षण लिखना बहुत आसान है। यूनिट परीक्षण आपको अपने आवेदन के अलग-अलग हिस्सों का परीक्षण करने की अनुमति देते हैं। इस तरह, भले ही कोई समापन बिंदु विफल हो जाए, आप विफलता के सटीक बिंदु को इंगित कर सकते हैं। नोड अनुप्रयोगों का परीक्षण करने के लिए आप जिन उपकरणों का उपयोग कर सकते हैं उनमें से एक जेस्ट है।