Adding Login Functionality

// routes/users.js
const express = require('express');
const vdict = require('../config');
const router = express.Router();
const usersdb = require('../models/usersdb')

router.get('/', function(req, res, next){
  if(req.session.user)
    res.send('dashboard');
  else
    res.redirect('/users/login');
});

router.get('/login', function(req, res, next){
  res.render('login', vdict);
});

router.post('/login', function(req, res, next){
  usersdb.users.findOne({username:req.body.username}, function (err, user){
    if (err) return console.error(err);
    if(user){
      if(usersdb.bcrypt.compareSync(req.body.password, user.password)){
        req.session.user = user.username;
        vdict.message = '';
        res.send('dashboard');
      }else{
        vdict.message = 'ពាក្យ​សំងាត់​មិនត្រឹមត្រូវ​ទេ';
        res.redirect('/users/login');
      }
    }else{
      vdict.message = 'ឈ្មោះ​អ្នក​ប្រើប្រាស់​មិន​ត្រឹមត្រូវ​ទេ';
      res.redirect('/users/login');
    }
  });
});

module.exports = router;
// models/usersdb.js
class Usersdb{
  constructor(){
    const mongoose = require('mongoose');
    const bcrypt = require('bcryptjs');

    const usersSchema = new mongoose.Schema({
      username: {type: String, required: true},
      password: {type: String, required: true},
      email: {type: String, required: true},
      role: {type: String, required: true},
      date: {type: Date, required: true}
    });

    const users = mongoose.model('users', usersSchema);
    this.users = users;
    this.bcrypt = bcrypt;

    users.findOne(function (err, user){
      if (err) return console.error(err);
      if(!user){
        const hash = bcrypt.hashSync('password', 12);
        const root = new users({username:'root', password:hash, email:'root@multimedia.com', role:'Admin', date: new Date()});
        root.save(function (err, root){
          if (err) return console.error(err);
        });
      }
    });
  }

  checkUser(user){

  }

}//end class

module.exports = new Usersdb();
<!--views/index.ejs-->
<%- include('partials/head') %>
<%- include('partials/header') %>

<link rel='stylesheet' href='/stylesheets/index.css' />
<link rel='stylesheet' href='/stylesheets/login.css' />
<script src='/javascripts/utility.js'></script>

<section class="login region">
  <form id="login" action="/users/login" method="post">
    <span>ឈ្មោះ​អ្នក​ប្រើប្រាស់ៈ</span><input type="text" name="username" required />
    <span>ពាក្យ​សំងាត់ៈ</span><input type="text" name="password" required />
    <span></span><input type="submit" value="បញ្ជូន" />
  </form>
  <div style="text-align:center;" class="message"><%- message %></div>
  
</section>

<%- include('partials/footer.ejs') %>
/* public/stylesheets/login.css */
.login{
  background:lightgrey;
  border-radius:3px;
  max-width:450px;
}
#login{
  display:grid;
  grid-template-columns: 30% auto;
  grid-gap:5px;
  margin:30px auto 0;
  padding:20px;
  
}
#login span{
  text-align:right;
}
#login input[type=text]{
  padding:0 5px;
}
#login input[type=submit]{
  font:14px/1.5 OdorMeanChey;
}

GitHub: "https://github.com/Sokhavuth/multimedia
Heroku: https://khmerweb-multimedia.herokuapp.com/

Comments

Popular posts from this blog