Una cookie HTTP, cookie web o cookie de navegador es una pequeña pieza de datos que un servidor envía a el navegador web del usuario. El navegador guarda estos datos y los envía de regreso junto con la nueva petición al mismo servidor. Las cookies se usan generalmente para decirle al servidor que dos peticiones tienen su origen en el mismo navegador web lo que permite, por ejemplo, mantener la sesión de un usuario abierta. Las cookies permiten recordar la información de estado en vista a que el protocolo HTTP es un protocolo sin estado.
Las cookies se utilizan principalmente con tres propósitos:
Crea un nuevo proyecto, según Express - Bases, Express - ORM (Básico), Express - ORM (Intermedio), Express - Parámetros de consulta y Parámetros de ruta, Express - REST, Express - Formularios I y Express - Formularios II.
hito9-api
npm install
set PORT=4444
npm run devstart
Crea un nuevo proyecto, según Express - Bases, Express - Bootstrap, Express - Layouts y Partials, Express - Formularios I y Express - Formularios II.
hito6-admin
Realice las instrucciones que se encuentran en el tutorial Express - ORM (Avanzado).
login/login.ejs
a admin/views/
login/login.js
a admin/routes/
login/login.css
a admin/public/stylesheets/
login/icons
a admin/public/
admin/app.js
Obtenga la referencia a admin/routes/login.js
...
var usersRouter = require('./routes/users');
var loginRouter = require('./routes/login');
...
Registre la ruta /login
antes de la ruta raíz /
...
app.use('/login', loginRouter);
app.use('/', indexRouter);
...
Compruebe el funcionamiento del servidor, con: npm run devstart
http://localhost:3000/login
admin/middlewares
Agregue el script de autorización en admin/middlewares/auth.js
:
var express = require('express');
var router = express.Router();
var auth = (req, res, next) => {
if (req.session && req.session.user !== undefined ) {
return next();
} else {
return res.sendStatus(401);
}
};
module.exports = auth;
npm install express-session
admin/app.js
:
Agregue la referencia a express-session, con:
...
var logger = require('morgan');
var session = require('express-session');
var indexRouter = require('./routes/index');
...
Añada el middleware del uso de sesión en la aplicación, con:
...
var app = express();
app.use(session({
secret: '2C44-4D44-WppQ38S',
resave: true,
saveUninitialized: false,
cookie: { maxAge: 60000 }
}));
// view engine setup
...
Agregue la referencia al middleware, con:
...
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var loginRouter = require('./routes/login');
var auth = require('./middlewares/auth');
var app = express();
...
Agregue el middleware auth.js a la ruta raíz /
...
app.use('/login', loginRouter);
app.use('/', auth, indexRouter);
...
npm run devstart
http://localhost:3000/
y http://localhost:3000/photos
npm install bcrypt
admin/routes/login.js
:
Agregue la referencia a bcrypt
, sequelize
y a los modelos.
var express = require('express');
var router = express.Router();
const bcrypt = require("bcrypt");
const sequelize = require('../models/index.js').sequelize;
var initModels = require("../models/init-models");
var models = initModels(sequelize);
...
Agregue la instanciación de la sesión, con:
...
router.post('/validate', async function(req, res, next) {
let { user, password } = req.body
let userdb = await models.users.findOne({
where: {
username: user
}
})
let valid = await bcrypt.compare(password, userdb.password);
if(valid) {
req.session.user = user;
res.redirect('/');
} else {
res.redirect('/login');
}
});
...
/login
admin
y admin
Modifique el partial admin/views/partials/header.ejs
. Agregue la referencia a /login/invalidate
...
<a class="nav-link px-3" href="/login/invalidate">Sign out</a>
...
Modifique el ruteador admin/routes/login.js
. Agregue el controlador para el método GET de la ruta /invalidate
...
router.get('/invalidate', function(req, res, next) {
req.session.destroy();
res.redirect('/login')
});
...
Sign out
de la esquina superior a la derecha.