Introducción

1

Qué necesitas para este curso y qué aprenderás sobre Node.js con Hapi

2

Conceptos principales de hapi y creación de nuestro primer servidor

3

Breve historia y estado actual

Creando un sitio básico con Hapi

4

El objeto h, response y sus herramientas

5

Uso de plugins - Contenido estático

6

Plantillas con Handlebars

7

Renderizado de vistas - Layout y template del home

8

Recibiendo parámetros en una ruta POST - Creación del registro

9

Definir una mejor estructura con buenas prácticas en Hapi

10

Validando la información - Implementando Joi

11

Introducción a Firebase

12

Creando un modelo y guardando en firebase

13

Implementando el login y validación del usuario

14

Autenticación de usuarios - Cookies y estado

15

Manejando errores

16

Visualización de errores

17

Controlar el error 404 en inert y el error de validación

18

Repaso - Creación del modelo y controlador para preguntas

19

Repaso - Creación de las rutas para crear preguntas

20

Listar las últimas preguntas en el home

Aplicacion de conceptos avanzados

21

Enrutamiento avanzado - visualizando una pregunta

22

Enrutamiento avanzado - respondiendo una pregunta

23

Generando la lógica de la plantilla según si es creador o contribuidor

24

Métodos de servidor - respuesta correcta

25

Usando métodos de servidor

26

Manejo del caché - Agregando el home al caché

27

Procesamiento de archivos - Aceptando imágenes

28

Logging con Good - Monitoreando el servidor

29

Creación de plugins - Teoría

30

Creación de plugins - Implementando un API REST

31

Estrategías de autenticación - Asegurando el API REST

32

Seguridad básica - Asegurando el servidor contra CSRF

33

Seguridad básica - Asegurando el servidor contra XSS

Herramientas de desarrollo

34

Depuración del proyecto

35

Ecosistema de Hapi

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Autenticación de usuarios - Cookies y estado

14/35
Recursos

"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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

zip

feedback al repo bienvenida

repo github

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