si no se guarda la cookie es porque falta el path
server.state(‘user’, {
ttl: 1000 * 60 * 60 * 24 * 7,
isSecure: process.env.NODE_ENV === ‘prod’,
encoding: ‘base64json’,
path: ‘/’
})
Introducción
Qué necesitas para este curso y qué aprenderás sobre Node.js con Hapi
Conceptos principales de hapi y creación de nuestro primer servidor
Breve historia y estado actual
Creando un sitio básico con Hapi
El objeto h, response y sus herramientas
Uso de plugins - Contenido estático
Plantillas con Handlebars
Renderizado de vistas - Layout y template del home
Recibiendo parámetros en una ruta POST - Creación del registro
Definir una mejor estructura con buenas prácticas en Hapi
Validando la información - Implementando Joi
Introducción a Firebase
Creando un modelo y guardando en firebase
Implementando el login y validación del usuario
Autenticación de usuarios - Cookies y estado
Manejando errores
Visualización de errores
Controlar el error 404 en inert y el error de validación
Repaso - Creación del modelo y controlador para preguntas
Repaso - Creación de las rutas para crear preguntas
Listar las últimas preguntas en el home
Aplicacion de conceptos avanzados
Enrutamiento avanzado - visualizando una pregunta
Enrutamiento avanzado - respondiendo una pregunta
Generando la lógica de la plantilla según si es creador o contribuidor
Métodos de servidor - respuesta correcta
Usando métodos de servidor
Manejo del caché - Agregando el home al caché
Procesamiento de archivos - Aceptando imágenes
Logging con Good - Monitoreando el servidor
Creación de plugins - Teoría
Creación de plugins - Implementando un API REST
Estrategías de autenticación - Asegurando el API REST
Seguridad básica - Asegurando el servidor contra CSRF
Seguridad básica - Asegurando el servidor contra XSS
Herramientas de desarrollo
Depuración del proyecto
Ecosistema de Hapi
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
"Hay diferentes maneras de mantener el estado de autenticación de un usuario en un sistema. Para este proyecto usaremos la forma más sencilla que es a través de una cookie y usando el state de Hapi.
Con la función server.state( '<nombre de la cookie>', { <opciones> } )
definimos las características de la _ cookie_ que usaremos en la ruta definida para hacer la validación. Luego asignaremos los datos propios de la autenticación a esta cookie en el controlador, en la misma instrucción en la que hacemos el redirect al Home, luego de validado el usuario.
Habiendo guardado el estado de la autenticación, podemos definir entonces diferentes opciones en el Layout que nos permitan por ejemplo, hacer Logout y mostrar la información del usuario, entre otras cosas.
Aportes 11
Preguntas 0
si no se guarda la cookie es porque falta el path
server.state(‘user’, {
ttl: 1000 * 60 * 60 * 24 * 7,
isSecure: process.env.NODE_ENV === ‘prod’,
encoding: ‘base64json’,
path: ‘/’
})
Mi aporte en el código
// Configurar el servidor para el envio de cookies (nombreCookie, opciones)
// https://hapi.dev/tutorials/cookies/?lang=en_US
// tiempo de vida de la cookie (en milisegundos)
// localhost no es seguro
// codificación de la cookie
server.state('user', {
ttl: 1000 * 60 * 60 * 24 * 7,
isSecure: process.env.NODE_ENV === 'prod',
encoding: 'base64json',
})
En el controlador
async function validateUser(req, h) {
try {
const userLogin = await user.validateUser(req.payload)
if (!userLogin) {
return h.response('Email y/o Contraseña incorrectas').code(401)
}
// En aplicaciones Web, las cookies se usan a menudo para mentener el estado de un usuario entre solicitudes http
// Se redirecciona al usuario y se le envía la cookie llamada user configurara previamente en la aplicacion (nombreCookie, data)
return h.redirect('/').state('user', {
name: userLogin
function index(req, h) {
return h.view(‘index’, {
title: ‘Home’,
user: req.state.user // El valor de esta variable de ruta se obteniene del estado actual de la aplicación (accede a la cookie user) para mostrar o no ciertos controles en la vista
})
}```
.name,
email: userLogin.email,
})
} catch (error) {
console.error(error)
return h.response(‘Problemas al logear el usuario’).code(500)
}
}
Enviar variables a la vistas
function index(req, h) {
return h.view(‘index’, {
title: ‘Home’,
user: req.state.user // El valor de esta variable de ruta se obteniene del estado actual de la aplicación (accede a la cookie user) para mostrar o no ciertos controles en la vista
})
}
y en la vista
{{! Si hay usuario, es porque hay estado, es decir, hay cookie activa (logeado) }}
{{#if user}}
<div class=“col m-2 text-right”>
<h6><span class=“badge badge-info”>{{user.name}}</span></h6>
<a href="/" class=“btn btn-primary btn-lg border border-white” role=“button” aria-pressed=“true”>Preguntar</a>
<a href="/logout" class=“btn btn-primary btn-lg border border-white ml-2” role=“button” aria-pressed=“true”>Salir</a>
</div>
{{else}}
<div class=“col m-2 text-right”>
<a href="/login" class=“btn btn-primary btn-lg border border-white” role=“button” aria-pressed=“true”>Login</a>
<a href="/register" class=“btn btn-primary btn-lg border border-white ml-2” role=“button” aria-pressed=“true”>Registrarse</a>
</div>
{{/if}}
Cada clase supera a la anterior.
Excelente,
✌
😊👌
Según recuerdo las cookies sirven para poder compartir información entre peticiones (request) por esta razón cuando se guarda una cookie esta se envía en todas las peticiones, por eso la pasamos a la vista desde el request 😎
Genial
Les comparto el zip con el avance hasta logout route funcionando…
y con bootstrap 4.6, por cierto
feedback al repo bienvenida
Que implementación tan genial, cada vez me voy acostumbrando más al flujo de autenticación de usuarios, la primera vez que lo hice me pareció demasiado complejo, pero ahora ya entiendo mejor xD
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.