Sistemas de Logeo
Paquete passport:
Para un acceso seguro a nuestra aplicación tenemos tres
mecanismos:
- Mediante claves cifradas a traves de SSL
- Encriptando la clave en el servidor con el algoritmo MD5
- Con las variables de sesión protegiendo las rutas de los usuarios no logeados
El paquete passport se encargara de las variables de sesión y de las rutas para los usuarios logeados.
Vamos a hacer uso de dos paquetes:
- passport : Acceso al sistema de seguridad.
- passport-local : Permite crear la estrategia local, encriptacion local y md5 donde podemos indicar las rutas limitadas a los intrusos.
Instalamos los
siguientes paquetes en el package.json:
npm install passport
npm install passport-local
Definimos la estrategia local:
Vamos a simular el acceso a datos con un array de usuarios
en forma JSON con tres campos:
- nombre : nombre completo
- nombreUsuario : nick
- password : clave
Tenemos el modulo passport-local que tiene la clase Strategy
Creamos una instancia sobre el
despues le pasamos el objeto logeo con nombre del usuario y la clave y una funcion de callback que nos devuelve:
var EstrategiaLogin = require(‘passport-local’).Strategy;
var nuestraEstrategia
=EstrategiaLogin(logeo);
despues le pasamos el objeto logeo con nombre del usuario y la clave y una funcion de callback que nos devuelve:
callback devolución
de tres parametros:
- Parametros de error si ocurren
- Devolución de un objeto en caso autentificación correcta o un booleano false si en caso contrario
- Devolucion de un JSON en caso de autentificacion falsa con un mensaje
Definimos la
estrategia de logeo:
var EstrategiaLogin =
require(‘passport-local).Strategy;
function
logueo(nombre, password, callback) {
//llamada
a la base de datos y obtencion del objeto
getBaseDatos(nombre, function(err,usuario)
if (err) {
return callback(err)
}
if
(¡usuario){
return callback(null,false,{mensaje:
mensajeJSON})
}
if
(usuario.passport == passport){
return callback(null,usuario,null);
}else{
return callback(null,false,{mensaje: ‘Las
claves no coinciden’})
}
}
var estrategia = new EstrategiaLogin(logeo);
var
passport = require(‘passport’);
var session
= require(‘cookie-session);
passport.use(estrategia);
passport.serializeUser(serializaUsuario)
{
//serializeUser
determina qué datos del objeto de usuario deben almacenarse en la sesión.
function
serializaUsuario(usuario,callback)
{
callback(null,usuario.nombreUsuario)
}
}
//req.session.passport.usuario =
{nombreUsuario: 'juan'}
passport.deserializeUser(deserializaUsuario)
function deserializaUsuario(nombreUsuario,callback)
{
usuarioBD(nombreUsuario,function(err,usuario){
if (err){
return callback(err)
}else{
return callback(null,usuario);
}
});
}
//el
objeto de usuario se adjunta a la solicitud como req.usuario
Encriptamos las variables de sessión e insertamos el middleware
en app:
app.use(session
({secret : 'clave'}));
Inicializamos el passport:
app.use(passport.initialize());
Damos permiso a passport para que modifice las variables de
sessión:
app.use(passport.session());
Uso de passport:
app.post('/login',
passport.authenticate('local',
{
failureRedirect: '/fallo' }), function (req, res) {
//estrategia a emplear despues de un usuario logeado
});
Proteccion
de las rutas:
function
loginMiddleware(req, res, callback) {
if (req.isAuthenticated()) {
return callback(req, res); //Si el cliente esta autentificado
} else {
res.redirect('/login'); //Nos
devuelve a la pagina de logeo
}
}
No hay comentarios:
Publicar un comentario