Authenticate trong NodeJs với Express
-
Mình có tạo cơ sở dữ liệu trên mongodb tên project và 1 collection là users như sau
Mình tạo một view login sau:
form(method='post',action='/users/login',enctype='multipart/form-data').navbar-form.navbar-right
.form-group
input.form-control(name='username',type='text', placeholder='Username')
.form-group
input.form-control(name='password',type='password', placeholder='Password')
button.btn.btn-success(name='submit', type='submit',value='Login') Đăng NhậpTrong routes users mình code những dòng sau:
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var db = require('monk')('localhost/project');
var userss = db.get('users');
//
passport.serializeUser(function(user, done) {done(null, user.id);
});passport.deserializeUser(function(id, done) {
userss.findById(id, function(err, user) { done(err, user);
});
});
//
passport.use(new LocalStrategy(
function(username, password, done){
userss.findOne(username, function(err,user){
if(err) throw err;
if(!user){
return done(null,false, {message: 'Unknown User'});
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
} else
return done(null, user);
});
}));
//
router.post('/login',passport.authenticate('local',{failureRedirect:'/users/register', failureFlash:'Invalid username or password'}), function(req,res){
console.log("Success");
req.flash('success', 'OK');
res.redirect('/');
});
module.exports = router;bên file app.js mình có thêm những code như sau:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());// express session
app.use(session({
secret: 'secret',
saveUninitialized:true,
resave: true
}));
// passport
app.use(passport.initialize());
app.use(passport.session());Khi test login với username là tranthanh và password là 26121995. Kết quả trả về là trường hợp failure mình đã thiết lập trong
router.post('/login',passport.authenticate('local',{failureRedirect:'/users/register', failureFlash:'Invalid username or password'})
mình đã test thử mọi cách mình cảm thấy LocalStrategy của mình có vấn đề gì đó hình như không chạy từ dòng userss.findOne()
Mong mọi người giúp đỡ fix dùm mình
-
findOne({'username':username},function())
vì bạn đang dùng fineOne nên bạn phải chỉ ra cái mà bạn đưa vào chứ ko phải như findById(id,function(){})