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(鈥榰ser鈥, {
ttl: 1000 * 60 * 60 * 24 * 7,
isSecure: process.env.NODE_ENV === 鈥榩rod鈥,
encoding: 鈥榖ase64json鈥,
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(鈥榠ndex鈥, {
title: 鈥楬ome鈥,
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(鈥楶roblemas al logear el usuario鈥).code(500)
}
}

Enviar variables a la vistas



function index(req, h) {
return h.view(鈥榠ndex鈥, {
title: 鈥楬ome鈥,
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=鈥渃ol m-2 text-right鈥>
<h6><span class=鈥渂adge badge-info鈥>{{user.name}}</span></h6>
<a href="/" class=鈥渂tn btn-primary btn-lg border border-white鈥 role=鈥渂utton鈥 aria-pressed=鈥渢rue鈥>Preguntar</a>
<a href="/logout" class=鈥渂tn btn-primary btn-lg border border-white ml-2鈥 role=鈥渂utton鈥 aria-pressed=鈥渢rue鈥>Salir</a>
</div>
{{else}}
<div class=鈥渃ol m-2 text-right鈥>
<a href="/login" class=鈥渂tn btn-primary btn-lg border border-white鈥 role=鈥渂utton鈥 aria-pressed=鈥渢rue鈥>Login</a>
<a href="/register" class=鈥渂tn btn-primary btn-lg border border-white ml-2鈥 role=鈥渂utton鈥 aria-pressed=鈥渢rue鈥>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