2015-09-22 7 views
13

में प्रमाणीकरण त्रुटि संदेश passport.js मैं Passport.js का उपयोग कर उपयोगकर्ताओं को प्रमाणित करने के लिए एक नया Sails.js परियोजना है। मेरे पास मूलभूत प्रमाणीकरण काम कर रहा है (जिसका अर्थ है कि कोई उपयोगकर्ता साइन अप कर सकता है और सफलतापूर्वक लॉग इन कर सकता है), लेकिन यदि वे सही क्रेडेंशियल्स दर्ज नहीं करते हैं तो लॉगिन दृश्य में उपयुक्त त्रुटि संदेश प्रदर्शित करना चाहते हैं। मैं यह नहीं समझ सकता कि दृश्य में किसी भी त्रुटि संदेश को कैसे मुद्रित किया जाए।प्रदर्शन दृश्य

यहाँ मेरी सेटअप है। फिर

var passport = require('passport'); 

    module.exports = { 

    _config: { 
    actions: false, 
    shortcuts: false, 
    rest: false 
    }, 

    login: passport.authenticate('local', { successRedirect: '/', 
          failureRedirect: '/login', 
          failureFlash: true 
    }), 

    logout: function(req, res) { 
    req.logout(); 
    res.redirect('/login'); 
    } 
}; 

, इस ठीक से काम कर रहा है उपयोगकर्ता उनके सही साख में भर जाता है, तो:

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

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findOne({ id: id } , function (err, user) { 
     done(err, user); 
    }); 
}); 

passport.use(new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback : true 
}, 
function(req, email, password, done) { 

    User.findOne({ email: email }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Please enter a valid email address.' }); 
     } 

     if (!req.body.username) { 
     return done(null, false, { message: 'Please enter your username.' }); 
     } 

     bcrypt.compare(password, user.password, function (err, res) { 
      if (!res) { 
      return done(null, false, { 
       message: 'Invalid Password' 
      }); 
      } 

      var returnUser = { 
      username: user.username, 
      email: user.email, 
      createdAt: user.createdAt, 
      id: user.id 
      }; 

      return done(null, returnUser, { 
      message: 'Logged In Successfully' 
      }); 

     }); 
    }); 
    } 
    )); 

तब मैं api/controllers/AuthController.js जो निम्नलिखित शामिल है,: मैं config/passport.js जो निम्नलिखित शामिल है। मैं अपने templating इंजन के रूप में Handlebars उपयोग कर रहा हूँ, और इसलिए की तरह लॉगिन ध्यान में रखते हुए त्रुटि संदेश प्रदर्शित करने के लिए करना चाहते हैं:

<div class="alert">{{ message }}</div> 

अब तक मैं कोई लाभ नहीं हुआ {{ failureMessage }}{{ message }}{{ req.flash.failureMessage }}{{ req.flash.err }}{{ req.flash.message }} कोशिश की है। तो यह सब कहने के लिए, मैं अपने दृश्य में उचित त्रुटि संदेश कैसे प्रदर्शित करूं? और बेहतर अभी तक, मैं अपने विचार में ग़लत क्षेत्र को कैसे हाइलाइट करूं?

उत्तर

2

पहली नज़र में, पाल एक्सप्रेस 3.0 उपयोग कर रहा है की तरह लग रहा है। पासपोर्ट दस्तावेज़ों (http://passportjs.org/docs) के अनुसार, आपको फ्लैश का समर्थन करने के लिए स्पष्ट रूप से मिडलवेयर जोड़ने की आवश्यकता होगी (वे https://github.com/jaredhanson/connect-flash की अनुशंसा करते हैं)।

1

अगर यह, आप मदद कर सकता है ब्रैड पता नहीं है।

https://stackoverflow.com/a/25151855/3499069

अपने serializeUser में मुझे लगता है कि आप इसे user[0].id होने की जरूरत है कहते हैं, लेकिन मैं पासपोर्ट से दूर हाल ही में स्थानांतरित कर दिया है, तो मैं गलत हो सकता है।

2
नहीं

एक पासपोर्ट विशेषज्ञ यहाँ है, लेकिन this के अनुसार तुम सब करने की जरूरत है req.flash('error') साथ लॉगिन दृश्य फिर से प्रस्तुत करना है:

res.render("login", {error: req.flash("error")}); 

और फिर हैंडल टेम्पलेट में, त्रुटि प्रदर्शित:

{{ error }} 
0

मेरी राय में आप एक्सप्रेस चमक शामिल नहीं किया था?

var flash = require('connect-flash'); 
app.use(flash()); 
अपने रूटर में

जोड़ने

req.flash(type, message); 

और का उपयोग कर

var t = req.flash(type); 
res.render(view, {flashMessage: t}); 
संबंधित मुद्दे