2013-02-03 40 views
6

मैंने पाया कि done() विधि (या success(), जैसा कि मेरे डीबगर द्वारा बताया गया है) में तीसरा तर्क भी है जिसे info कहा जाता है। क्या कोई मुझे बता सकता है कि इसमें क्या मूल्य होता है?नोड.जेएस + पासपोर्ट: किए गए() विधि में तीसरे तर्क 'जानकारी' का क्या होता है?

संपादित

done() विधि मैं की बात कर रहा हूँ एक हम एक रणनीति कॉलबैक में कॉल करने के लिए है। जैसे

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
    }); 
    } 
)); 

स्निपेट here से है। जैसा कि देखा जा सकता है, कुछ मामलों में, message किसी ऑब्जेक्ट में done() पर तीसरे तर्क के रूप में पारित किया जा रहा है। हम मार्ग विधि में message तक कैसे पहुंच सकते हैं?

+0

कृपया कुछ उदाहरण कोड दिखाएं या हमें सही दिशा में इंगित करें। यह थोड़ा अस्पष्ट है। साथ ही, मुझे लगता है कि आपने इसे टैग किया है, लेकिन आपका प्रश्न कभी पासपोर्ट का उल्लेख नहीं करता है, इसलिए मुझे यह जानने में थोड़ी देर लग गई कि आप किस बारे में पूछ रहे थे। – loganfsmyth

+0

@loganfsmyth को इंगित करने के लिए धन्यवाद! मैंने क्यू को अपडेट किया है, अगर मुझे और स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं। – craftsman

+0

क्या आप दिखा सकते हैं कि आप मिडलवेयर को कैसे कॉल कर रहे हैं? – loganfsmyth

उत्तर

8

आपको req.authInfo के रूप में तीसरे पैरामीटर के रूप में पारित जानकारी तक पहुंचने में सक्षम होना चाहिए।

आप hereinfo के रूप में प्रसंस्करण देख सकते हैं, जहां इसे authInfo पर असाइन किया गया है और फ्लैश संदेशों के लिए उपयोग किया जाता है।

5

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

और loganfsmyth ने बताया, inforeq.authInfo पर सेट है ताकि मिडलवेयर या मार्ग बाद में इसका उपयोग कर सकें।

साथ ही, आपको, registering the transformAuthInfo द्वारा जानकारी वस्तु आगे बदल सकता है इस तरह:

passport.transformAuthInfo(function(info, done) { 
    Client.findById(info.clientID, function (err, client) { 
    info.client = client; 
    done(err, info); 
    }); 
}); 

LocalStrategy के लिए, आप see in the verified function कर सकते हैं कि जानकारी पारित हो दोनों असफल और सफलता कार्रवाई करने के लिए।

तो अतिरिक्त रूप से, आप type और message गुण निर्दिष्ट कर सकते हैं और इन्हें उपयोगकर्ता को प्रदर्शित फ़्लैश स्थिति सूचना संदेशों में उपयोग किया जाएगा। (type उपयोगकर्ता को प्रमाणीकृत होने पर 'सफलता' के लिए डिफ़ॉल्ट, और अन्यथा 'त्रुटि')।

फ्लैश संदेश Express.x में request.flash() फ़ंक्शन के माध्यम से काम करते हैं। यह एक्सप्रेस 3.x - connect-flash में हटा दिया गया था यदि आपको इस कार्यक्षमता की आवश्यकता है तो मिडलवेयर की अनुशंसा की जाती है।