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

इस ट्यूटोरियल में, आप सीखेंगे कि पासपोर्ट और मोंगोडीबी का उपयोग करके नोड में प्रमाणीकरण कैसे लागू किया जाए।

प्रमाणीकरण और प्राधिकरण क्या हैं?

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

Passport.js क्या है?

पासपोर्ट.जेएस (या पासपोर्ट) NodeJS के लिए एक प्रमाणीकरण मिडलवेयर है जो उपयोगकर्ताओं को प्रमाणित करने के लिए 500 से अधिक रणनीतियाँ प्रदान करता है जिनमें शामिल हैं पासपोर्ट-स्थानीय जो उपयोगकर्ता नाम और पासवर्ड का उपयोग करता है।

instagram viewer

यह ट्यूटोरियल उपयोग करता है पासपोर्ट-स्थानीय तथा पासपोर्ट-jwt सुरक्षित मार्गों के लिए।

NodeJS में उपयोगकर्ता प्रमाणीकरण कैसे सेट करें

अब आप उपयोगकर्ता प्रमाणीकरण और Passport.js के बारे में कुछ जानते हैं, हम देख सकते हैं कि NodeJS पर प्रमाणीकरण कैसे सेट किया जाए। नीचे, हमने उन चरणों की रूपरेखा तैयार की है, जिन्हें आपको उठाने की आवश्यकता होगी।

चरण 1: एक नोड सर्वर सेट करें

नाम का फोल्डर बनाएं उपयोगकर्ता-प्रमाण-नोडज और अपने टर्मिनल का उपयोग करके उस पर नेविगेट करें।

mkdir उपयोगकर्ता-प्रमाण-नोडज. 

सीडी उपयोगकर्ता-प्रमाण-नोडज

अगला प्रारंभ करें पैकेज.जेसन.

npm init

चूंकि आप उपयोग कर रहे होंगे व्यक्त करना, एक NodeJS बैकएंड फ्रेमवर्क, इसे निम्न कमांड चलाकर स्थापित करें।

एनपीएम मैं एक्सप्रेस

अब एक फाइल बनाएं, app.js, और सर्वर बनाने के लिए निम्न कोड जोड़ें।

कॉन्स्ट एक्सप्रेस = आवश्यकता ("एक्सप्रेस");
कॉन्स्ट ऐप = एक्सप्रेस ();
कॉन्स्ट पोर्ट = 3000;
app.listen (पोर्ट, () => {
कंसोल.लॉग (`पोर्ट पर सुन रहा है ${PORT}`);
});

संबंधित: जानें कि Ubuntu पर Npm और Node.js कैसे स्थापित करें

चरण 2: डेटाबेस सेट करें

उपयोगकर्ता डेटा संग्रहीत करने के लिए आपको एक डेटाबेस की आवश्यकता होती है। आप एक MongoDB डेटा स्कीमा बनाने के लिए mongoose का उपयोग करेंगे जो डेटाबेस में आपके द्वारा संग्रहीत डेटा की संरचना और प्रकार को परिभाषित करता है। चूंकि आप उपयोगकर्ता डेटा संग्रहीत कर रहे हैं, इसलिए उपयोगकर्ता स्कीमा बनाएं।

मूंगा स्थापित करें।

एनपीएम मैं नेवला

एक नई फ़ाइल बनाएँ, userModel.js, और निम्नलिखित जोड़ें।

कास्ट नेवला = आवश्यकता ('नेवला')
कास्ट {स्कीमा} = नेवला
const UserSchema = नई स्कीमा ({
ईमेल: {
टाइप करें: स्ट्रिंग,
आवश्यक: सत्य
},
पासवर्ड: {
टाइप करें: स्ट्रिंग,
आवश्यक: सत्य
}
})
const UserModel = mongoose.model('user', UserSchema);
मॉड्यूल.एक्सपोर्ट्स = यूजरमॉडल;

संबंधित: MongoDB में डेटाबेस और संग्रह कैसे बनाएं?

पासवर्ड संग्रहीत करने से पहले, आपको सुरक्षा उद्देश्यों के लिए इसे एन्क्रिप्ट करना होगा। आप उपयोग करेंगे बीक्रिप्टजेएस, एक बहुत ही उपयोगी npm पैकेज जो एन्क्रिप्टेड पासवर्ड के साथ काम करना आसान बनाता है।

इंस्टॉल बीक्रिप्टज।

एनपीएम मैं bcryptjs

संशोधित usermodel.js डेटाबेस में सहेजने से पहले पासवर्ड को एन्क्रिप्ट करने के लिए।

कास्ट नेवला = आवश्यकता ('नेवला')
const bcrypt = आवश्यकता ('bcryptjs');
कास्ट {स्कीमा} = नेवला

const UserSchema = नई स्कीमा ({
...
})
UserSchema.pre('save', async function (अगला) {
कोशिश करो {
// पंजीकरण की विधि की जाँच करें
कॉन्स उपयोगकर्ता = यह;
अगर (!user.isModified('password')) अगला();
// नमक उत्पन्न करें
कास्ट नमक = प्रतीक्षा करें bcrypt.genSalt (10);
// पासवर्ड हैश करें
कॉन्स हैशेडपासवर्ड = प्रतीक्षा करें bcrypt.hash (यह पासवर्ड, नमक);
// सादे टेक्स्ट पासवर्ड को हैशेड पासवर्ड से बदलें
यह पासवर्ड = हैशेड पासवर्ड;
अगला();
} पकड़ (त्रुटि) {
अगला लौटें (त्रुटि);
}
});
...
const उपयोगकर्ता = mongoose.model ('उपयोगकर्ता', UserSchema);

यहाँ आप a. का उपयोग कर रहे हैं पूर्व बचत पासवर्ड को सहेजने से पहले उसे संशोधित करने के लिए हुक। विचार सादा पाठ पासवर्ड के बजाय पासवर्ड के हैश संस्करण को संग्रहीत करना है। एक हैश एक सादा पाठ स्ट्रिंग से उत्पन्न एक लंबी जटिल स्ट्रिंग है।

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

db.js बनाएं और डेटाबेस को कॉन्फ़िगर करें।

कॉन्स्ट नेवला = आवश्यकता ("मोंगोज़");
नेवला वादा = वैश्विक। वादा;
कॉन्स्ट डीबीयूआरएल = "मोंगोडब: // लोकलहोस्ट / यूजर";
कॉन्स्ट कनेक्ट = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true});
कास्ट डीबी = mongoose.connection;
db.on ("त्रुटि", () => {
कंसोल.लॉग ("कनेक्ट नहीं हो सका");
});
db.once ("खुला", () => {
कंसोल.लॉग ("> डेटाबेस से सफलतापूर्वक जुड़ा");
});
};
मॉड्यूल.एक्सपोर्ट्स = {कनेक्ट};

app.js में, डेटाबेस से कनेक्ट करें।

// डीबी. से कनेक्ट करें
कॉन्स्ट डीबी = आवश्यकता ('./ डीबी');
डीबी.कनेक्ट ();

चरण 3: पासपोर्ट सेट करें

इंस्टॉल पासपोर्ट तथा पासपोर्ट-स्थानीय। आप इन पैकेजों का उपयोग उपयोगकर्ताओं को पंजीकृत करने और लॉगिन करने के लिए करेंगे।

एनपीएम मैं पासपोर्ट
एनपीएम मैं पासपोर्ट-स्थानीय

एक नई फ़ाइल बनाएँ, पासपोर्टकॉन्फिग.जेएस, और आयात पासपोर्ट-स्थानीय और यह userModel.js.

const LocalStraregy = आवश्यकता ("पासपोर्ट-स्थानीय")। रणनीति;
कॉन्स उपयोगकर्ता = आवश्यकता ("./ उपयोगकर्ता मॉडल");

उपयोगकर्ता पंजीकरण को संभालने के लिए पासपोर्ट कॉन्फ़िगर करें।

const LocalStrategy = आवश्यकता ("पासपोर्ट-स्थानीय");
कॉन्स उपयोगकर्ता = आवश्यकता ("./ उपयोगकर्ता मॉडल");
मॉड्यूल.एक्सपोर्ट्स = (पासपोर्ट) => {
पासपोर्ट.उपयोग(
"स्थानीय-साइनअप",
नई स्थानीय रणनीति(
{
उपयोगकर्ता नाम फ़ील्ड: "ईमेल",
पासवर्ड फ़ील्ड: "पासवर्ड",
},
async (ईमेल, पासवर्ड, किया हुआ) => {
कोशिश करो {
// जांचें कि क्या उपयोगकर्ता मौजूद है
const userExists = प्रतीक्षा करें User.findOne ({ "ईमेल": ईमेल});
अगर (उपयोगकर्ता मौजूद है) {
किया गया रिटर्न (शून्य, झूठा)
}
// प्रदान किए गए उपयोगकर्ता डेटा के साथ एक नया उपयोगकर्ता बनाएं
कॉन्स्ट यूजर = प्रतीक्षित यूजर। क्रिएट ({ईमेल, पासवर्ड});
वापसी की गई (शून्य, उपयोगकर्ता);
} पकड़ (त्रुटि) {
किया (त्रुटि);
}
}
)
);
}

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

उपयोग पासपोर्ट-स्थानीय उपयोगकर्ता लॉगिन को भी संभालने के लिए।

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

यहां, जांचें कि उपयोगकर्ता डेटाबेस में मौजूद है या नहीं, और यदि वे ऐसा करते हैं, तो जांचें कि प्रदान किया गया पासवर्ड डेटाबेस में मौजूद पासवर्ड से मेल खाता है या नहीं। ध्यान दें कि आप भी कॉल करते हैं मैचपासवर्ड () उपयोगकर्ता मॉडल पर विधि तो यहां जाएं userModel.js फ़ाइल और इसे जोड़ें।

UserSchema.methods.matchPassword = async फ़ंक्शन (पासवर्ड) {
कोशिश करो {
वापसी की प्रतीक्षा करें bcrypt.compare (पासवर्ड, this.password);
} पकड़ (त्रुटि) {
नई त्रुटि फेंकें (त्रुटि);
}
};

यह विधि उपयोगकर्ता और डेटाबेस में पासवर्ड की तुलना करती है और यदि वे मेल खाते हैं तो सही हो जाती है।

चरण 4: प्रमाणीकरण मार्ग सेट करें

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

में app.js, उपयोगकर्ता को पंजीकृत करने के लिए आपके द्वारा अभी बनाए गए पासपोर्ट प्रमाणीकरण मिडलवेयर का उपयोग करें।

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

संबंधित: प्रमाणीकरण बनाम। प्राधिकरण: क्या अंतर है?

सफल होने पर, साइनअप मार्ग को बनाए गए उपयोगकर्ता को वापस कर देना चाहिए।

इसके बाद, लॉगिन रूट बनाएं।

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

चरण 5: संरक्षित मार्ग जोड़ें

अब तक, आपने इस्तेमाल किया है पासपोर्ट एक मिडलवेयर बनाने के लिए जो एक उपयोगकर्ता को डेटाबेस में पंजीकृत करता है और दूसरा जो एक पंजीकृत उपयोगकर्ता को साइन इन करने की अनुमति देता है। इसके बाद, आप JSON वेब टोकन (JWT) का उपयोग करके संवेदनशील मार्गों की सुरक्षा के लिए एक प्राधिकरण मिडलवेयर बनाएंगे। JWT प्राधिकरण को लागू करने के लिए, आपको यह करना होगा:

  • जेडब्ल्यूटी टोकन जेनरेट करें।
  • उपयोगकर्ता को टोकन पास करें। उपयोगकर्ता इसे प्राधिकरण अनुरोधों में वापस भेज देगा।
  • उपयोगकर्ता द्वारा वापस भेजे गए टोकन को सत्यापित करें।

आप का उपयोग करेंगे जेसनवेबटोकन JWTs को संभालने के लिए पैकेज।

इसे स्थापित करने के लिए निम्न आदेश चलाएँ।

npm मैं jsonwebtoken

इसके बाद, सफलतापूर्वक लॉग इन करने वाले प्रत्येक उपयोगकर्ता के लिए एक टोकन जेनरेट करें।

में app.js, आयात जेसनवेबटोकन और नीचे की तरह लॉगिन मार्ग को संशोधित करें।

ऐप.पोस्ट(
"/ प्रमाणीकरण/लॉगिन",
पासपोर्ट.प्रमाणीकरण ('स्थानीय-लॉगिन', {सत्र: असत्य}),
(req, res, next) => {
// लॉग इन करें
jwt.sign({user: req.user}, 'secretKey', {expiresIn: '1h'}, (गलती, टोकन) => {
अगर (गलती) {
वापसी res.json({
संदेश: "लॉगिन करने में विफल",
टोकन: शून्य,
});
}
रेस.जेसन({
टोकन
});
})
}
);

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

सफल होने पर लॉगिन मार्ग एक टोकन देता है।

उपयोग पासपोर्ट-jwt संरक्षित मार्गों तक पहुँचने के लिए।

एनपीएम मैं पासपोर्ट-jwt

में पासपोर्टकॉन्फिग.जेएस, कॉन्फ़िगर करें पासपोर्ट-jwt.

const JwtStrategy = आवश्यकता ("पासपोर्ट-jwt")। रणनीति;
const { ExtractJwt } = आवश्यकता ("पासपोर्ट-jwt")
मॉड्यूल.एक्सपोर्ट्स = (पासपोर्ट) => {
पासपोर्ट.उपयोग(
"स्थानीय-लॉगिन",
नई स्थानीय रणनीति(
...
);
पासपोर्ट.उपयोग(
नई JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader ("प्राधिकरण"),
सीक्रेटऑर्की: "सीक्रेटकी",
},
async (jwtPayload, किया हुआ) => {
कोशिश करो {
// उपयोगकर्ता निकालें
कॉन्स्ट यूजर = jwtPayload.user;
किया (शून्य, उपयोगकर्ता);
} पकड़ (त्रुटि) {
किया (त्रुटि, गलत);
}
}
)
);
};

ध्यान दें कि आप अनुरोध निकाय के बजाय प्राधिकरण शीर्षलेख से जेडब्ल्यूटी निकाल रहे हैं। यह हैकर्स को किसी अनुरोध को इंटरसेप्ट करने और टोकन हथियाने से रोकता है।

देखने के लिए कैसे पासपोर्ट-jwt गार्ड मार्गों, में एक संरक्षित मार्ग बनाएँ ऐप.जे.एस.

app.get(
"/ उपयोगकर्ता/संरक्षित",
पासपोर्ट.प्रमाणीकरण ("jwt", {सत्र: झूठा}),
(req, res, next) => {
res.json ({उपयोगकर्ता: req.user});
}
);

वैध JWT के साथ केवल एक अनुरोध उपयोगकर्ता डेटा लौटाता है।

अब आप अपने उपयोगकर्ता प्रमाणीकरण को अगले स्तर पर ले जाने के लिए तैयार हैं

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

उपयोगकर्ता प्रमाणीकरण क्या है और यह कैसे काम करता है?

आपके ऑनलाइन खातों के लिए अधिकतम स्तर की सुरक्षा सुनिश्चित करने के लिए उपयोगकर्ता प्रमाणीकरण की मूल बातें समझना महत्वपूर्ण है। तो, चलो गोता लगाएँ।

आगे पढ़िए

साझा करनाकलरवईमेल
संबंधित विषय
  • प्रोग्रामिंग
  • प्रोग्रामिंग
  • प्रोग्रामिंग भाषा
  • प्रोग्रामिंग टूल्स
लेखक के बारे में
मैरी गैथोनी (8 लेख प्रकाशित)

मैरी गैथोनी एक सॉफ्टवेयर डेवलपर हैं जिन्हें तकनीकी सामग्री बनाने का जुनून है जो न केवल सूचनात्मक है बल्कि आकर्षक भी है। जब वह कोडिंग या लेखन नहीं कर रही होती है, तो उसे दोस्तों के साथ घूमने और बाहर रहने में मज़ा आता है।

मैरी गैथोनि. की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें