पिछले कुछ दिनों से मैं पासपोर्ट.जेएस का उपयोग कर अपना पहला उपयोगकर्ता लॉगिन & प्रमाणीकरण प्रणाली विकसित कर रहा हूं। अजीब रूप से पर्याप्त, मैंने इसे समाप्त कर लिया है और यह इरादे के अनुसार काम करता है। समस्या यह है कि, हालांकि मैंने बहुत सारे लेख पढ़े हैं और ऑनलाइन उदाहरणों की जांच की है, मुझे लगता है कि प्रति कोड पूरी तरह से समझ में नहीं आता है। मुझे इसके पीछे की प्रक्रिया को समझने में कोई समस्या नहीं है और ऐसा क्यों होना है। यदि आप मेरे लिए कोड के कुछ हिस्सों को स्पष्ट कर सकते हैं तो मैं वास्तव में इसकी सराहना करता हूं। (- नेवला मॉडल उपयोगकर्ता)पासपोर्ट.जेएस उपयोगकर्ता लॉगिन और प्रमाणीकरण
// Passport session setup
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// Use the Local Strategy within passport
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: 'Unknown user: ' + username});
}
user.comparePassword(password, function(err, isMatch) {
if (err) {
return done(err);
}
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Invalid Password' });
}
});
});
}));
var app = module.exports = express();
app.configure(function() {
app.set('views', path.join(__dirname + '/views'));
app.set('view engine', 'html');
app.engine('html', hbs.__express);
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: 'xxx' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname + '/public')));
});
मैं MongoDB उपयोग कर रहा हूँ: यह काम कर कोड, मेरे app.js फ़ाइल में संग्रहीत है। साथ ही, डेटाबेस में पासवर्ड स्टोर करने के लिए मैं वर्तमान में bcrypt का उपयोग कर रहा हूं।
मुझे लगता है कि सबसे महत्वपूर्ण हिस्सा जो मुझे समझ में नहीं आता है कॉलबैक फ़ंक्शन किया गया है। मैं समझ सकता हूं कि यह केवल कुछ मानों को पास करता है, और मुझे पता है कि इसका पहला पैरामीटर त्रुटि है और दूसरा डेटा है। फिर भी, मैं इसे पूरी तरह से समझ नहीं पा रहा हूं क्योंकि मैंने विशेष रूप से एक पैरामीटर के रूप में प्रदान नहीं किया है।
// Random Function
var randomFunction = function (a, b, done) {
done(a, b);
};
// Then I would call the randomFunction providing my own **done**
randomFunction('Random', 'Words', function(a, b) { return a + b; });
फिर भी, मेरे उदाहरण में मैं किया कॉलबैक को निर्दिष्ट एक नहीं कर रहा हूँ: उदाहरण के लिए, मैं इस तरह एक समारोह होता है। यह बस एक आवश्यक कॉलबैक फ़ंक्शन पैरामीटर है या यह इस तरह के रूप में एक सामान्य मिडलवेयर में अगले समारोह के रूप में एक ही है:
function middleware (req, res, next) {
next(req.user); // pass the req.user to next middleware
}
इसके अलावा, जहां Passport.js उपयोगकर्ता है कि यह संभालती बाध्य करता है? क्या यह req.user पर बांधता है? और मैं इसे कुछ दृश्यों में कैसे पास कर सकता हूं, उदाहरण के लिए, उपयोगकर्ता नाम प्रदर्शित करने के लिए?
मैं आपकी प्रतिक्रिया के लिए तत्पर हूं!
धन्यवाद!
आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! जैसा कि मैंने इसे समझ लिया है, किया गया एक कॉलबैक फ़ंक्शन है जो मिडलवेयर से जानकारी वापस करने के लिए उपयोग किया जाता है। जानकारी से मेरा मतलब है 3 पैरामीटर (त्रुटि, उपयोगकर्ता, जानकारी)। असल में, क्या मैं किए गए कॉलबैक को (उच्च स्तरीय तरीके से) उस विशिष्ट मिडलवेयर की वापसी के रूप में मान सकता हूं? –
यदि मैं आपके प्रश्न को सही तरीके से समझ गया, नहीं। 'किया' का उपयोग केवल अगले स्तर पर कुछ डेटा प्रदान करने के लिए किया जाता है। 'सत्यापन() 'को कॉल करने के बाद आपका सत्यापन कोड सामान्य तरीके से निष्पादित किया जाएगा, यही कारण है कि आपको सत्यापन कोड निष्पादित करना बंद करने के लिए' वापसी (गलती); 'का उपयोग करना चाहिए। एसिंक सामान के लिए यह आम मामला है। –
मेरा यही मतलब था ^^ मुझे लगता है कि मैं अपने जवाब में थोड़ा अस्पष्ट था :) धन्यवाद आपकी प्रतिक्रिया के लिए, मैं वास्तव में इसकी सराहना करता हूं! –