????

Your IP : 18.219.115.102


Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/routes/
Upload File :
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/routes/auth.js

const LocalStrategy = require('passport-local').Strategy;
var accCtrl = require('../controllers/taikhoan').create();

module.exports = function (passport) {
  passport.serializeUser((user, done) => {
    done(null, user);
  })
  passport.deserializeUser((user, done) => {
    done(null, user);
  })
  passport.use(new LocalStrategy(
    function (username, password, done) {
      accCtrl.isUser(username, password)
        .then(function (user) {
          if (!user) {
            return done(null, false, {
              message: 'Tên đăng nhập hoặc mật khẩu không chính xác'
            });
          }
          return done(null, user);
        }).catch(function (err) {
          return done(err);
        })
    }
  ))
  var router = require('express').Router();

  router.get('/', function (req, res, _next) {
    if (req.isAuthenticated && req.isAuthenticated()) {
      let redirectTo = redirect(req);
      if (redirectTo) {
        res.redirect(redirectTo);
      }
    }
    else {
      res.render('auth.eta', {
        csrfToken: req.csrfToken()
      });
    }
  })

  router.post('/login', function (req, res, next) {
    if (req.body.rememberme !== 'on') {
      req.session.cookie.maxAge = null;
    }
    else {
      req.session.cookie.expires = false;
    }
    passport.authenticate('local', function (err, user, _info) {
      if (err) { return next(err); }
      if (!user) {
        return res.render('auth.eta', {
          message: 'Tên đăng nhập hoặc mật khẩu không chính xác'
        });
      }
      req.login(user, function (err) {
        if (err) { return next(err); }
        if (user.TrangThai == 3) {
          res.clearCookie('passport');
          req.session.destroy();
          return res.render('auth.eta', {
            message: 'Tài khoản của bạn chưa được kích hoạt hoặc đã khóa, '
              +'bạn hãy liên lạc với người quản trị của hệ thống để cấp phép cho bạn.'
          });
        }
        let redirectTo = redirect(req);
        if (redirectTo) {
          return res.redirect(redirectTo);
        }
        else return res.send('Không tìm thấy đường dẫn');
      });
    })(req, res, next);
  });

  router.post('/login', passport.authenticate('local', {
    failureRedirect: '/auth',
    failureFlash: true
  }), function (req, res, next) {
    next();
  })

  // signup
  router.post('/signup', function (req, res) {
    accCtrl.addReader(req.body)
      .then(function () { res.status(200).send('Tạo tài khoản thành công') })
      .catch(function (err) { res.status(400).send(err.message) });
  });
  // kiểm tra tài khoản tồn tại
  router.post('/check', function (req, res) {
    accCtrl.checkAcc(req.body['login'], req.user)
      .then(function (result) { res.json({ exists: result }) })
      .catch(function (err) { res.status(400).send(err.message) })
  });

  router.all('*', (req, res) => res.redirect('/auth'))

  function redirect(req) {
    var redirectTo;
    if (req.session.redirectTo) {
      redirectTo = req.session.redirectTo;
      delete req.session.redirectTo;
    } else {
      redirectTo = '/main';
    }
    return redirectTo;
  }
  return router;
};