2013-12-17 7 views
13

मैं जो कुछ भी सोचा था, वह संभवतः सबसे सरल लेखक होगा - साइट एक लॉग इन स्क्रीन पर लोड होती है, उपयोगकर्ता एक फॉर्म में प्रमाण-पत्र दर्ज करता है, जमा करने पर मैं पासपोर्ट का उपयोग कर रहा हूं। प्रमाण पत्र की जांच करने के लिए जेएस और Sequelize। इनमें से अधिकांश को विभिन्न ट्यूटोरियल, या पासपोर्ट वेबसाइट से कॉपी किया गया है। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, बदलता हूं या प्रयास करता हूं, जैसे ही मैं फॉर्म सबमिट बटन पर क्लिक करता हूं, साइट बस लटकती है। देव उपकरण नेटवर्क टैब में मैं सिर्फ लंबित के रूप में पोस्ट अनुरोध/लॉगिन दिखाता हूं।अधिक पासपोर्ट.जेएस दुःख - फॉर्म सबमिशन पर लटकता है

सभी संभावित अतिरिक्त समस्याओं को खत्म करने के लिए, मैंने सीक्वेलिज को हटा दिया, और हार्ड कोड किए गए उपयोगकर्ताओं का उपयोग किया, स्थानीय उपयोग उदाहरण passport github page पर। फिर भी, कोई बदलाव नहीं, Sequelize करने के लिए समस्या नहीं थी।

मुझे यकीन है कि यह कुछ गूंगा है। मैंने स्पष्ट समाधानों का प्रयास किया है, जैसे यह सुनिश्चित करना कि मेरा फॉर्म 'उपयोगकर्ता नाम' और 'पासवर्ड' भेज रहा है।

मेरे प्रपत्र इस तरह दिखता है:

var login = require('../app/controllers/login'); 
app.get('/', login.index); 
app.post('/login', login.auth); 

पृष्ठ लोड प्राप्त अनुरोध पर ठीक:

form(method="post", action="/login") 
    fieldset 
    legend Please Log In 
    label(for="username") Username: 
    input#username(type='text', name="username", autocomplete="off") 
    label(for="password") Password: 
    input#password(type='password', name="password") 
    button#login(type="submit") Log In 

नोड मेरी app.js में एक रूटर है, जो यह भी शामिल है का उपयोग करता है। पोस्ट पर यह इस पर ले जाने वाली:

exports.auth = function (req, res, next) { 
    console.log(req.body); 
    passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
    }); 
}; 

console.log (req.body) प्रपत्र मान दिखाने, ऊपर ठीक आता है, तो हम उस बिंदु तक ठीक हैं। लेकिन कुछ भी नहीं। यह पिछले हिस्सा है:,

passport.use(new LocalStrategy(
    function(username, password, done) { 
    console.log('local strat invoked'); 
    findByUsername(username, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } 
     if (user.password != password) { return done(null, false, { message: 'Invalid password' }); } 
     return done(null, user); 
    }); 
    } 
)); 

मैं कोड है कि इस findByUsername समारोह के साथ उपयोगकर्ता के लिए डीबी जाँच करने के लिए इस्तेमाल किया Sequelize (नकल की और पासपोर्ट GitHub पृष्ठ पर ऊपर उल्लेख पद से सीधे चिपकाया) बदली लेकिन क्योंकि console.log ('स्थानीय स्ट्रैट आवेदक') कभी नहीं आ रहा है, मैं उस बिंदु के बाद भी कुछ भी अनुमान लगा रहा हूं।

पासपोर्ट.serializeUser और passport.deserializeUser भी शामिल हैं, लेकिन मैं कल्पना नहीं कर सकता कि उन मंचों में समस्याएं हैं जहां मैं फंस गया हूं।

कोई विचार यह काम करने के लिए मुझे कौन सा कदम गुम है?

उत्तर

27

पासपोर्ट मिडलवेयर है, यदि आप इसे एक मार्ग हैंडलर समारोह में एम्बेड करते हैं, आप इसे लागू करने की जरूरत है:

exports.auth = function (req, res, next) { 
    console.log(req.body); 
    passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
    })(req, res, next); // <-- NEED TO INVOKE WITH req, res, next 
}; 

या, और अधिक बस मध्यस्थ के रूप में इसका इस्तेमाल (जो सिफारिश की दृष्टिकोण है:

exports.auth = passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
}); 
+0

आविष्कार समस्या थी धन्यवाद! मिडलवेयर विधि मैं कभी भी काम नहीं कर सका, इसलिए मुझे उस पर फिर से विचार करने की आवश्यकता होगी। – DrHall

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