2015-09-22 19 views
13

Tôi có dự án Sails.js mới sử dụng Passport.js để xác thực người dùng. Tôi có xác thực cơ bản hoạt động (nghĩa là người dùng có thể đăng ký và đăng nhập thành công), nhưng muốn hiển thị thông báo lỗi thích hợp trong chế độ xem đăng nhập nếu họ không nhập thông tin đăng nhập chính xác. Tôi không thể tìm ra cách in bất kỳ thông báo lỗi nào trong chế độ xem.Hiển thị thông báo lỗi xác thực passport.js trong giao diện

Đây là thiết lập của tôi. Tôi có config/passport.js, trong đó có những điều sau đây:

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' 
      }); 

     }); 
    }); 
    } 
    )); 

Sau đó, tôi có api/controllers/AuthController.js, trong đó có những điều sau đây:

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'); 
    } 
}; 

lần nữa, đây là hoạt động bình thường nếu người dùng điền vào thông tin chính xác của họ. Tôi đang sử dụng tay lái làm công cụ khuôn mẫu của tôi, và muốn để hiển thị các thông báo lỗi trong giao diện đăng nhập như sau:

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

Cho đến nay tôi đã cố gắng {{ failureMessage }}{{ message }}{{ req.flash.failureMessage }}{{ req.flash.err }}{{ req.flash.message }} vô ích. Vì vậy, tất cả điều này để nói, làm cách nào để hiển thị thông báo lỗi thích hợp trong chế độ xem của tôi? Và tốt hơn, làm thế nào tôi sẽ làm nổi bật lĩnh vực errant trong quan điểm của tôi?

Trả lời

1

Không biết nếu điều này có thể giúp bạn, Brad.

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

Tôi nghĩ rằng trong serializeUser của bạn gọi cho bạn cần nó để được user[0].id, nhưng tôi đã chuyển đi từ Hộ chiếu thời gian gần đây, vì vậy tôi có thể là sai.

2

Không phải là một chuyên gia về hộ chiếu ở đây, nhưng theo this tất cả các bạn cần làm là để lại làm cho xem đăng nhập với req.flash('error'):

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

Và sau đó trong tay lái mẫu, hiển thị lỗi:

{{ error }} 
0

Theo ý kiến ​​của bạn, bạn không bao gồm các nhấp nháy nhanh?

var flash = require('connect-flash'); 
app.use(flash()); 

trong router của bạn thêm

req.flash(type, message); 

và sử dụng

var t = req.flash(type); 
res.render(view, {flashMessage: t}); 
Các vấn đề liên quan