2014-10-07 14 views
5

के साथ अनधिकृत अनुरोधों को कैसे संभालें the documentation के अनुसार, यदि मैं प्रमाणीकरण अनुरोधों को संभालता हूं, तो मैं सफल प्रयासों को पकड़ने में सक्षम हूं।नोडजेस/पासपोर्ट

app.post('/login', 
    passport.authenticate('local'), 
    function(req, res) { 
    // If this function gets called, authentication was successful. 
    // `req.user` contains the authenticated user. 
    res.redirect('/users/' + req.user.username); 
    }); 

लेकिन, प्रलेखन की तरह कहते हैं:

डिफ़ॉल्ट रूप से, अगर प्रमाणीकरण विफल रहता है, पासपोर्ट एक 401 अनधिकृत स्थिति के साथ जवाब देंगे, और किसी भी अतिरिक्त मार्ग संचालकों लागू नहीं किया जाएगा। यदि प्रमाणीकरण सफल होता है, तो अगला हैंडलर लागू किया जाएगा और req.user संपत्ति प्रमाणीकृत उपयोगकर्ता पर सेट की जाएगी।

मैं अनधिकृत लॉगिन प्रयास को कैसे प्रबंधित कर सकता हूं?

मुझे पता है कि मैं इसे कस्टम मिडलवेयर से संभाल सकता हूं लेकिन क्या कोई बेहतर तरीका है?

उत्तर

10

आपको कस्टम कॉलबैक अनुभाग passport docs में देखना चाहिए जो प्रमाणीकरण अनुरोध को संभालने के अंतर्निहित व्यवहार को ओवरराइड करने के तरीके के बारे में बताता है। आप एक कस्टम कॉलबैक लिख सकते हैं जो done फ़ंक्शन का उद्देश्य करेगा जिसे आप रणनीति से आमंत्रित कर रहे हैं। passport.authenticate कॉल, जो किया समारोह है कि आप स्थानीय रणनीति से आह्वान रूप में काम करेगा करने के लिए दूसरा पैरामीटर पर

app.get('/login', function(req, res, next) { 
    /* look at the 2nd parameter to the below call */ 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

देखो।

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

passport.use(new LocalStrategy(
    function(username, password, done) { 
    /* see done being invoked with different paramters 
     according to different situations */ 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { return done(null, false); } 
     return done(null, user); 
    }); 
    } 
)); 
+1

धन्यवाद, महान काम करता है – Joseph