Go con Gin, el mega tutorial (V)

Aquí estamos de nuevo con el Go con Gin. ¿Os apetece un poco? Seguro que si. En esta entrada vamos a ver como realizar el registro, login y logout de un usuario.

 

ACTUALIZACIÓN: Hemos visto la necesidad de actualizar la librería de plantillado que se explica al final del post. La actualización se añade al final del post, y a pesar que vamos a cambiar la librería, esto no invalida lo ya explicado. Simplemente conviene le uso de la nueva librería de plantillado.

Índice de la serie

Login de usuarios

En este post vamos a meter mucho más código que en el post pasado. Así que a disfrutar con Go con Gin.

NOTA: En este post hemos visto la necesidad de cambiar la librería de plantillado. Por lo que podéis ver la actualización que hemos realizado en el capítulo 2.

Empezaremos con el modelo que representara el formulario web para el login y para el registro.

El login de usuario debe de solicitar el identificador único del usuario, usualmente el nombre de usuario o correo electrónico, y la contraseña del usuario. Para entender por qué y como hacerlo os remitimos al capítulo 3.

Para el formulario de registro necesitaremos una estructura parecida, pero solicitando más información. Por ejemplo, el nombre de usuario, correo electrónico y contraseñas.

Como vemos no difiere mucho del modelo loginForm. Aún así, este formulario tiene una peculiaridad y es que el usuario introducirá dos valores que deben de coincidir. Éstos son PasswordA y PasswordB.

Sería muy útil disponer de un método que nos permita validar si ambos campos son correctos o no. Esto se suele llamar validación del formulario, y es aquí donde debemos definir que queremos aceptar como entrada valida en los formularios. Nosotros solo hemos solo hemos añadido una validación, por el momento, y es para validar que los dos campos Password coinciden. Para un producto profesional habría que validar cada uno de los campos, como por ejemplo, el Email.

Mejorando el modelo

Por otra parte, hemos mejorado ligeramente el modelo que representa a los usuarios de la base de datos. Ahora ese modelo debe guardar el password cifrado, como os contamos en la entrada pasada.

Utilizando el modulo bcrypt ciframos la contraseña para no guardarla en texto plano. Con el método SetPassword generamos un password cifrado. Por otro lado, con CheckPassword comprobamos que ambos password coinciden.

Te puede interesar  Telegram bots en golang

También hemos creado un modelo UserSession. Este modelo nos permitirá disponer de la información del usuario mientras navega por goblog. Lo que haremos es incrustar el modelo UserSession dentro del modelo User.

Hasta aquí tenemos los modelos necesarios para representar todas las nuevas necesidades. Ahora vamos a ver como hacer el registro, login y logout.

Registro

Tal como hicimos con el formulario del login, hay que crear una nueva entrada en el router para poder procesar el registro, También hay que crear el menejador o handler para procesar la petición, tanto POST como GET.

El handler procesará la petición y deberemos mostrar (enviar) el formulario cuando la petición sea de tipo GET, por el contrario se deberá de procesar la información del formulario cuando la petición sea POST.

La parte del GET no tiene complicación alguna, es tal cual lo hicimos en el post de formularios web.

La parte del POST es más complicada, pues en esta parte se deben de realizar varias comprobaciones.

Las comprobaciones serán las siguientes:

  • Comprobar que los datos introducidos son correctos.
  • Comprobar si existe el usuario
  • Registrar el usuario
  • Volver a la página de inicio

El primer punto lo realizaremos ejecutando los métodos de validación del modelo RegistrationForm. En caso de no pasar la validación deberemos de informar al usuario mostrándole un error en la página de registro. Si la validación es correcta, pasamos al siguiente punto.

El segundo punto será consultar en la base de datos si existe algún registro que coincide con nuestro nuevo usuario. En caso de existir un usuario con el mismo nombre deberemos de informar al usuario, igual que en el punto anterior, mostrando un error.

Te puede interesar  Puesta en marcha de Odoo en Debian 9 - Parte 1

Para registrar el usuario lo que hay que hacer en crear un nuevo objeto del modelo User. Hay que recordar que la contraseña del usuario debe ser cifrada mediante el método SetPassword. Por último, hay que insertar el nuevo usuario en la base de datos.

Ya solo nos queda volver a la página principal, donde el usuario podrá hacer uso de la parte privada o autenticada de goblog.

Login

El proceso de login es más sencillo. Ya hicimos gran parte en la entrada dedicada a los formularios web. Así que solo explicaremos la parte que comentamos como: // TODO.

Las comprobaciones a realizar son las siguientes:

  • Comprobar si existe el usuario indicado en la base de datos
  • Comprobar que la contraseña introducida coincide

La comprobación del usuario en la base de datos es bastante sencilla. La idea es buscar en la base de datos por el nombre de usuario o valor único identificativo, si obtenemos resultados entonces el usuario existe, de lo contrario el usuario no existe. Si el usuario no existe debemos de indicárselo al usuario con un error en la página de login.

La comprobación de la contraseña la realizaremos utilizando el método CheckPassword. Si todo es correcto el usuario es válido, de lo contrario mostraremos un error en la página de login.

Logout

El último caso que nos queda por ver es el logout.

En principio hacer logout significa salir de algún sitio, pero si os fijáis hemos registrado un usuario y no lo hemos “metido” en ningún sitio, al igual que con el proceso de login, hemos realizado la validación del usuario, pero nos falta “meterlo” en algún sitio, para que pueda hacer logout más tarde.

Te puede interesar  DEP, el gestor de librerías y vendoring de Go

Lo que nos falta realmente son las sesiones. Un tema importante y para el que dedicaremos un post completo.

Ahora mismo no podemos terminar el handler logout, porque no tenemos las sesiones implementadas todavía.

Con esto terminamos la entrada de hoy. Recuerda que puedes ver el código en nuestro Github https://github.com/Cibernomadas/goblog.

Nos vemos en la próxima entrada. Saludos nómadas.

 

Go con Gin, el mega tutorial (V)
Etiquetado en:                 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *