(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.
0 nhận xét:
Post a Comment