रणनीति-क्रियान्वयन passport.authenticate
के साथ संयोजन के लिए काम करता है, दोनों अनुरोधों को प्रमाणीकृत करने और सफलता/विफलता को संभालने के लिए काम करता है।
app.post('/login', passport.authenticate('local', {
successRedirect: '/loggedin',
failureRedirect: '/login', // see text
failureFlash: true // optional, see text as well
});
यह जहां तीन शर्तों में से एक हो सकता है, रणनीति में कोड कॉल करेगा:
आप इस मार्ग (जो एक ई-मेल पता और पासवर्ड पारित हो जाता है) का उपयोग कर रहे कहते हैं:
- उपयोगकर्ताओं की जानकारी लाने के लिए एक आंतरिक त्रुटि आई (डेटाबेस कनेक्शन चला गया है); यह त्रुटि इस पर पारित की जाएगी:
next(err)
; यह एक्सप्रेस द्वारा संभाला जाएगा और एक HTTP 500 प्रतिक्रिया उत्पन्न करेगा;
- प्रदान किए गए प्रमाण-पत्र अमान्य हैं (आपूर्ति किए गए ई-मेल पते के साथ कोई उपयोगकर्ता नहीं है, या पासवर्ड एक मेल नहीं है); उस स्थिति में, आप कोई त्रुटि उत्पन्न नहीं करते हैं, लेकिन आप उपयोगकर्ता ऑब्जेक्ट के रूप में
false
पास करते हैं: next(null, false)
; यह failureRedirect
ट्रिगर करेगा (यदि आप एक को परिभाषित नहीं करते हैं, तो एक HTTP 401 अनधिकृत प्रतिक्रिया उत्पन्न की जाएगी);
- सबकुछ जांचता है, आपके पास वैध उपयोगकर्ता ऑब्जेक्ट है, इसलिए आप इसे पास करते हैं:
next(null, user)
; यह successRedirect
ट्रिगर करेगा;
गलत प्रमाणीकरण (लेकिन एक आंतरिक त्रुटि) के मामले में, आप कॉलबैक के साथ एक अतिरिक्त संदेश पारित कर सकते हैं:
next(null, false, { message : 'invalid e-mail address or password' });
आप का इस्तेमाल किया है, तो failureFlash
और स्थापित the connect-flash middleware, आपूर्ति संदेश सत्र में संग्रहीत किया जाता है और इसे आसानी से एक्सेस किया जा सकता है, उदाहरण के लिए, टेम्पलेट में उपयोग किया जाना चाहिए।
संपादित करें: यह भी संभव है पूरी तरह से (एक रीडायरेक्ट या 401 भेजने के पासपोर्ट के बजाय) प्रमाणीकरण खुद प्रक्रिया का परिणाम को संभालने के लिए:
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting authentication status
if (! user) {
return res.send({ success : false, message : 'authentication failed' });
}
// ***********************************************************************
// "Note that when using a custom callback, it becomes the application's
// responsibility to establish a session (by calling req.login()) and send
// a response."
// Source: http://passportjs.org/docs
// ***********************************************************************
req.login(user, loginErr => {
if (loginErr) {
return next(loginErr);
}
return res.send({ success : true, message : 'authentication succeeded' });
});
})(req, res, next);
});
धन्यवाद! मुझे लगता है कि मेरे मामले में, मैं रीडायरेक्ट करने की बजाय AJAX के माध्यम से एक असफल प्रतिक्रिया भेजने की कोशिश कर रहा हूं।पासपोर्ट दस्तावेज़ों को देखते हुए, मुझे लगता है कि इसका मतलब है कि मुझे इसके बजाय एक कस्टम फ़ंक्शन कॉलबैक के साथ अपना मार्ग प्रारूपित करना होगा। –
यदि यह मदद करता है, तो मैंने अपने उत्तर को प्रमाणीकरण को संभालने का एक संभावित तरीका दिखाने के लिए संपादित किया :) – robertklep
"हैंडलिंग प्रमाणीकरण स्वयं" संपादित करने के लिए धन्यवाद, यह एक जीवन-बचतकर्ता था! – wulftone