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
    0_1476375572287_upload-c2b12b7c-e1c6-4bbf-a542-811f8304f6b2
    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ập

    Trong 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(){})


Log in to reply