20 October 2019

NodeJS ExpressJS: signedCookies [EX-17]

(Giúp server phát hiện sự thay đổi của cookie phía client)
/app.js
app.js
const express = require('express')
const app = express()
const port = 3000
const cookieParser = require('cookie-parser');

const userRoute = require('./routes').user;
const authRoute = require('./routes').auth;
const middlware = require('./middlwares/auth.middlware');

app.set('view engine', 'pug')
app.set('views', './views');

// https://expressjs.com/en/4x/api.html#req.body
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

app.use(cookieParser('abcdefgh123456789')); // random string
app.use(express.static('public'));

// GET method route
app.get('/', middlware.authorize, function (req, res) {
    res.render('index', {
        title: 'Hey',
        message: "ExpressJS"
    })
})

app.use('/users', middlware.authorize, userRoute);
app.use('/auth', authRoute);

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

/controller/auth.controller.js
auth.controller.js
const db = require('../db/index').lowDB;
const md5 = require('md5');

module.exports.login = function (req, res, next) {
    res.render('auth/login');
}

module.exports.postLogin = function (req, res, next) {
    const email = req.body.email;
    const password = req.body.password;

    const user = db.get('users').find({
        email: email
    }).value();

    if (!user) {
        res.render('auth/login', {
            errors: ['User does not exits'],
            values: res.body
        });
    }
    console.log(md5(password));
    if (md5(password) != user.password) {
        res.render('auth/login', {
            errors: ['Wrong password'],
            values: res.body
        });
    }
    res.cookie('userId', user.id, {
        signed: true
    });
    res.redirect('/users');
}

module.exports.postLogout = function (req, res, next) {
    res.clearCookie("userId");
    res.redirect('/');
}

/middlwares/auth.middlware.js
auth.middlware.js
const db = require('../db/index').lowDB;

module.exports.authorize = function(req, res, next) {
    console.log(req.signedCookies); // const cookieParser = require('cookie-parser'); vs app.use(cookieParser());
    if (!req.signedCookies.userId) {
        res.redirect('auth/login')
        return;
    }
    const user = db.get('users').find({
        id: req.signedCookies.userId
    }).value();
    if (!user) {
        res.redirect('auth/login');
        return;
    }
    res.locals.user = user; // Lưu object ở local nó chỉ tồn tại trong phiên làm việc => show tên người đăng nhập
    next();
}
Key name
2018
html
    head
        link(rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css")
        link(rel="stylesheet" href="/css/custom.css")
    body
        div(class="jumbotron text-center m-0 p-0")
            img(src="../../images/banner.jpg" class="w-100")
        nav(class="navbar navbar-expand-sm bg-dark navbar-dark")
            a(class="navbar-brand" href="/") Node JS + Express JS
            div(class="collapse navbar-collapse" id="collapsibleNavbar")
                ul(class="navbar-nav")
                    li(class="nav-item")
                        a(class="nav-link" href='/users') User Management
                    li(class="nav-item")
                        a(class="nav-link" href="/auth/login") Login
                    li(class="nav-item")
                        a(class="nav-link" href="/auth/logout") Logout
            span(class="text-white")= user && user.name
        div(class="container" style="margin-top:30px; min-height: 500px")
            div(class="row")
                div(class="col-sm-12")
                    block content
        div(class="jumbotron text-center p-3")
            h6 Copyright © 2019 Author DaiDH

TEST

Thay đổi id cookie của user đăng nhập hiện tại 62c56a thành id của user khác c908e2
Tiếp theo người dùng vào màn hình User Management phải qua auth.middlware.js res gửi lên sẽ là req.signedCookies.userId = false
Đưa người dùng quay lại màn login.

Related Posts:

  • NodeJS ExpressJS: MD5 password [EX-16] NPM Package MD5 /controller/user.controller.js 2018 const db = require('../db/index').lowDB; const ids = require('short-id'); const md5 = require('md5'); module.exports.index = function (req, res) { res.render('u… Read More
  • NodeJS ExpressJS: signedCookies [EX-17] signedCookies (Giúp server phát hiện sự thay đổi của cookie phía client) /app.js app.js const express = require('express') const app = express() const port = 3000 const cookieParser = require('cookie-parser'); const us… Read More
  • NodeJS ExpressJS: Environment Variables [EX-18] Environment Variables Cách 1: sử dụng module npm i dotenv /app.js app.js require('dotenv').config() console.log(process.env.SESSION_SECRET); const express = require('express') const app = express() const port = … Read More
  • NodeJS ExpressJS: Authentication [EX-15] Authentication  /views/auth/login.pug login.pug extends ../layouts/common.pug block content if errors each error in errors .m-auto.col-6.alert.alert-danger= error div(class="m-auto c… Read More
  • NodeJS ExpressJS: Upload Files [EX-20] Upload Files /views/users/create.pug create.pug extends ../layouts/common.pug block content if errors each error in errors .m-auto.col-6.alert.alert-danger= error h1(class="text-center… Read More

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang