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-apinpm installset PORT=4444npm run devstartCrea un nuevo proyecto, según Express - Bases, Express - Bootstrap, Express - Layouts y Partials, Express - Formularios I y Express - Formularios II.
hito6-adminRealice 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/middlewaresAgregue 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-sessionadmin/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 bcryptadmin/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.