2014-06-11 5 views
7

मेरे passport.js विन्यास इतना प्रकार है:Passport.js req.login में अनुरोध करने के लिए उपयोगकर्ता गुजर नहीं है()

const Local = require("passport-local").Strategy; 
const USMODEL = require("../models/user.js"); 
passport.serializeUser(function(user, done) { 
    console.log("SERIALIZING USER"); 
    done(null, user.id); 
}); 
passport.deserializeUser(function(id, done) { 
    console.log("DESUSER", id); 
    var US = mongoose.model("RegUser", USMODEL); 
    US.findById(id, function(err, user) { 
     done(err, id); 
    }); 
}); 
passport.use("local-login", new Local({ 
    usernameField: "email", 
    passwordField: "password", 
    passReqToCallback: true 

},function(req, email, password, done) { 
    var US = mongoose.model("RegUser", USMODEL); 
    US.findOne({"email": email}, function(err, user){ 
     if(err) throw err; 
     if(!user) return done(null, false); 
     if(!user.validPassword(password)) { 
      console.log("password not valid"); 
      return done(null, false); 
     } 
     return done(null, user); 
    }); 
})); 

क्योंकि मैं कई संग्रह के साथ हथकंडा मैं प्रत्येक कार्य के भीतर नेवला मॉडल बदल रहा हूँ एक समय में और मुझे क्या हो रहा है पर पूरा नियंत्रण रखना पसंद है।

मेरे router.js फ़ाइल निम्न पथ कि पासपोर्ट मिडलवेयर का इस्तेमाल करते हैं है:

app.get("/user/login", function(req, res) { 
    res.render("signin"); 
}); 
app.post('/user/login', function (req, res){ 
    passport.authenticate('local-login', function(err, user, info){ 
     if (err) return res.redirect("/"); 
     if (!user) return res.redirect('/'); 

     else { 
      req.login(user, function(err) { 
       if (err) return next(err); 
       console.log("Request Login supossedly successful."); 
       return res.redirect('/admin/filter'); 
      }); 
     } 
    })(req, res); 
}); 

कौन सा, सफल प्रमाणीकरण पर, करने के लिए/व्यवस्थापक/एक ही रूटर कि इतने तरह से चला जाता है में फिल्टर पुनर्निर्देश।

app.get("/admin/filter", isLoggedIn, function(req, res){ 
//rendering stuff here 
}); 

अब, व्यवस्थापक/फिल्टर अनुरोध एक मध्यस्थ जो, में सिद्धांत मेरी अंतिम बिंदुओं की सुरक्षा करता isLoggedIn बुलाया अतीत चला जाता है। यह बहुत प्रकार है:

function isLoggedIn(req, res, next) { 
console.log("This is the authentication middleware, is req authenticated?"); 
console.log(req.isAuthenticated()); 
console.log("Does req.user exist?") 
console.log(req.user); 
return next(); 
} 

अब, आप उम्मीद करेंगे कि क्योंकि मैं req.login कहा जाता है और मैं पसंद का मेरा अंतिम बिंदु पर पुनः निर्देशित कर ली, अनुरोध को प्रमाणीकृत किया जाएगा। यह मामला नहीं है।

Request Login supossedly successful. 
This is the authentication middleware, is req authenticated? 
false 
Does req.user exist? 
undefined 

मुझे मेरी समस्या का स्रोत नहीं दिख रहा है। सबकुछ जांचता है, क्योंकि रणनीति का आह्वान किया जा रहा है, साथ ही साथ कॉलबैक फ़ंक्शन और req.login जो सिद्धांत रूप में req.user ऑब्जेक्ट में डेटा के साथ प्रस्तुत करेगा। मैंने देखा है कि एक अजीब चीज यह है कि मुझे कार्रवाई में passport.deserializeUser() विधि दिखाई नहीं दे रही है। कभी। लेकिन यह समस्या के लिए मूर्त हो सकता है। पासपोर्ट निश्चित रूप से मेरी रणनीति का उपयोग कर रहा है और उपयोगकर्ता ऑब्जेक्ट को प्रस्तुत कर रहा है, लेकिन किसी भी तरह यह वही ऑब्जेक्ट अनुरोध में नहीं जा रहा है। क्या आपके पास क्या हो रहा है इसके बारे में कोई सुझाव या विचार है?

+0

क्या आपको 'आवश्यकता (' पासपोर्ट ') की आवश्यकता है? या 'पासपोर्ट-लोकल' की देखभाल कर रहा है - मैंने स्क्रैच से पासपोर्ट स्थापित किया है और एक ही मुद्दे पर समान समस्याएं थीं - यह याद रखने की कोशिश कर रहा था कि समस्या क्या थी। – ewizard

+0

अंत में – ewizard

+0

पर कॉलबैक फ़ंक्शन में 'passq.logs फ़ाइल में' req.login (उपयोगकर्ता ... 'को डालने का प्रयास करें, @ @ जादूगर पासपोर्ट-स्थानीय को पासपोर्ट के उपयोग की आवश्यकता होती है क्योंकि इसमें केवल रणनीति शामिल है। –

उत्तर

4

मैंने ट्यूटोरियल के साथ चारों ओर जॉगलिंग करके समस्या हल की जब मैंने पहली बार पासपोर्ट मिडलवेयर का उपयोग करना सीख लिया। पता चला है मैं विन्यस्त गलत कर रहा था: सर्वर फ़ाइल में इस तरह हुआ करता था मेरे कोड:

pass = require("passport"); 
app.use(pass.initialize()); 
app.use(pass.session()); 
require("./app/config/passport.js")(pass); 

यह इस किया जाना चाहिए था जब:

pass = require("passport"); 
require("./app/config/passport.js")(pass); 
app.use(pass.initialize()); 
app.use(pass.session()); 

या तो मैं दस्तावेज में हिस्सा याद किया जहां यह निर्दिष्ट किया गया है कि कॉन्फ़िगरेशन प्रारंभिकरण से पहले आना चाहिए या इसे टिप्पणी करने के लिए एक छोटी सी चीज के रूप में लिखा गया है। किसी भी तरह से, मैंने अपनी समस्या हल की।

+0

नहीं, आपका पिछला आदेश सही है या ऑर्डर कोई फर्क नहीं पड़ता। उदाहरण यहां देखें: https://github.com/tutsplus/passport-social/blob/master/app.js#L41 – derek

संबंधित मुद्दे