You are on page 1of 39

Capacitación formadores Generación de

capacidades en el Ecosistema Digital de


Bogotá

Formación especializada TI
Strong Params
Cuando recibimos los parámetros por medio del método params podemos encapsular estos
parámetros para garantizar seguridad y reducir la reescritura de código. De esta manera atacantes
maliciosos pueden sobreescribir el formulario pero los parámetros que se reciben son solo los que
indicamos.
Delete confirm
Algunas funcionalidades de HTML y JavaScript las podemos agregar en el
método link_to como por ejemplo la confirmación de eliminar.
Autenticación de usuarios con Ruby on Rails
Autenticación WEB

Aprender la forma de autenticar usuarios es una parte básica del diseño web. La
autenticación permite que verifiques la identidad de un miembro y determines
qué nivel de acceso tiene en el sitio, como por ejemplo si es un miembro o un
administrador. Hay diferentes tipos de autenticación web disponibles. El elegido
depende en gran medida de qué tan confidencial es la información en el sitio
web y cuánto control deseas ejercer sobre los miembros que pueden acceder a
ella.
Autenticación básica HTTP
HTTP básica es el tipo más simple de autenticación web disponible. Esta forma
de autenticación solicita al usuario que inicie sesión con su nombre de usuario y
contraseña. Sin embargo, la información se transmite utilizando codificación
Base64. Esto significa que la información enviada no es cifrada y segura. En
teoría, la información podría ser interceptada por un tercero.
Autenticación digest HTTP
Los protocolos de autenticación Digest funcionan de manera similar a la autenticación
básica. El servidor solicita la información de identificación, que es suministrada por el
usuario en la forma de un nombre de usuario y una contraseña. El servidor, a continuación,
compara las credenciales con lo que está en archivo, y siempre y cuando coincidan,
concederá el acceso. Es un escenario de inicio de sesión sencillo.

La diferencia primaria con la autenticación de HTTP con protocolo Digest es que la


conexión se realiza de una manera segura. Esto es debido a que las contraseñas son
"digeridas" y almacenadas en la base de datos de usuario en un formulario cifrado. Nadie,
ni siquiera el administrador, puede abrir la base de datos y saber la contraseña al mirar la
secuencia cifrada. De esta manera, la integridad de la contraseña es mucho más segura,
ya que sólo puede ser leída por el servidor web.
Autenticación de cliente HTTPS
HTTPS se logra cuando el HTTP estándar es combinado con un Socket Layer Secure
(SSL). Todo lo contenido dentro del SSL opera en un circuito cerrado, sin ninguna
interferencia exterior. Esto permite que el navegador web verifique la legitimidad de cada
página que se encuentra en el sitio web mediante la lectura de el Certificado de Clave
Pública (PKC o Criptografía asimétrica) del secure socket, y comparándolo con el archivo
guardado del certificado de seguridad del sitio.

HTTPS es ampliamente utilizado en sitios web de ecommerce o en cualquier lugar en el


que se accede a información confidencial. Esta forma de autenticación proporciona un
alto estándar de seguridad, porque cada operación de intercambio de información entre el
servidor y el navegador está cifrada y se envía a través de un canal seguro.
Autenticación basada en formularios
La autenticación basada en formularios se utiliza para recoger información de
los visitantes que no tienen una necesidad elevada de seguridad. Las encuestas,
los formularios de contacto y las páginas de registro se hacen a menudo
mediante la autenticación basada en formulario. El papel primario de este
protocolo de autenticación es ver qué campos del formulario se identifican como
requeridos, a continuación, asegurarse de que esos elementos se han llenado
correctamente antes de pasar el formulario completo al destinatario.
Funciones Autenticación
Este término es usado para englobar todo lo que se refiere al control de acceso
de los usuarios. Maneja las siguientes funciones, entre otras:
● Registro de usuarios.
● Manejo de contraseñas: confirmación, restablecer, recordar, validación.
● Confirmación de usuarios por correo electrónico.
● Validación de usuario.
● Creación de token de un usuario validado.
● Rastreo de usuario (conteo de logins de un username o dirección IP en un
tiempo determinado).
● Expiración de sesión.
● Bloqueo de usuarios.
Devise
Es una gema de Ruby on Rails que contiene todas las funciones necesarias para
realizar y gestionar la autenticación de usuarios.

Esta la podemos encontrar en https://rubygems.org/ junto con cientos de otras


gemas que podríamos usar en nuestros proyectos. Una vez la encontramos
copiamos su nombre (gem 'devise') en nuestro archivo gemfile. Y luego desde la
consola ejecutamos bundle install.
Devise configurar
Esta gema incluye unos nuevos generadores de código que podemos utilizar
para el proceso de autenticación. Lo primero que debemos realizar usar el
generador para crear las clases de devise que vamos a utilizar. Para esto
escribimos en la consola rails generate devise:install
Devise personalizar
Luego de generar el código de Devise, desde la consola recibiremos algunas
recomendaciones que debemos realizar para que funcione correctamente.

Lo primero es configurar el Mailer. Este lo podemos obviar mientras nos familiarizamos


con devise.

También nos pide que tengamos definida una URL de root (saludo_controller) y nos pide
que creemos unas etiquetes en el layout para mostrar alertas y noticias por medio de los
métodos notice y alert.

Finalmente también podríamos generar vistas para customizar el login.


Devise modelo
Ahora que ya tenemos devise instalado y configurado debemos crear el modelo donde se
persistirán los datos de autenticación. Para esto nos podemos apoyar en el generador de
código de devise usando rails generate devise Usuario.

Esto nos creara el modelo y su respectivo migrate. Ahora vamos a personalizar un poco
nuestra tabla ya que la que se crea por defecto tiene solo los campos basicos junto a
algunos de seguridad.
Devise routing
Cuando ejecutamos el generador de código de devise Usuario en routes también
nos agrego algunas rutas como cuando creamos un resource.

De esta manera podemos probar con algunas de estas rutas como esta
funcionando devise. Por ejemplo ingresemos a sign_up y creemos un usuario.
Devise funciones
Devise también nos provee de algunas funciones que podemos usar para validar
la presentación de nuestras vistas, es muy común por ejemplo que nos
apoyemos en la función usuario_signed_in? Para verificar si hay un usuario
logueado.
Devise funciones
Tambien podríamos agregar algunos links para iniciar sesión o para que creen
una cuenta.
Devise funciones
También podríamos cambiar el mensaje de la pagina de bienvenida para saludar
al usuario.
Devise vistas
Para poder personalizar las vistas de inicio de sesión y de creación de cuenta
debemos apoyarnos nuevamente en un generador de código que incluye devise.

Rails generate devise:views

Con este se generaran una serie de vistas para las funciones principales de
devise y podremos modificarlas a nuestro gusto.
Devise sessions new
Devise registrations new
Devise shared links
Asociaciones bases de datos
Ahora que ya tenemos una base de datos con dos tablas(tareas y usuarios) podríamos
conocer como funcionan las asociaciones entre tablas por medio de ActiveRecord de rails.

Podríamos hacer una asociación entre un usuario y las tareas que agrego. Es decir una
relación de uno a muchos. Para hacer esto debemos modificar la migración de la tabla
tareas y nos podemos apoyar en un generador de código de rails.

Rails generate migration AddUsuarioRefToTareas usuario:references

Esto nos va a crear la relación es decir va a agregar el campo usuario en la tabla tareas.
Ahora debemos agregar algunos requisitos en los modelos para que reconozca el tipo de
relación.
Relación uno a muchos
En el modelo Tarea vamos a indicar que se espera un usuario y en el modelo
Usuario vamos a indicar que este puede estar en muchas tareas.
Modificando métodos tareas_controller
Ahora como existe el campo usuario dentro de tareas para que podamos
incluirlo al crear una tarea podemos agregar el usuario actual al método créate.

Tambien podríamos modificar la vista show para mostrar quien escribió el


articulo.
Callbacks
Pero cuando tratemos de crear un articulo sin iniciar sesión también nos dará
error ya que ahora necesita un usuario. Para esto podemos usar un callback que
trae por defecto devise que verifica que exista sesión y podemos especificar
para que métodos queremos que aplique o en cuales no usando only o except.
Callbacks
Otro callback que podríamos hacer es uno que nos ejecute la función
find(params[:id]) ya que lo estamos realizando en varios métodos. Por
convención vamos a definirlo como set_tarea. Y esto se ejecutara
automáticamente en todos los métodos menos en los que excluimos.
Scaffold
Es una herramienta de Rails que nos permite realizar tanto un modelo, su
respectivo controlador y las vistas relacionados con un solo comando. El modo
de crearlo es a partir de un generador de código de la siguiente manera rails
generate scaffold [Modelo] [campo1:string…] por ejemplo.

Rails generate Comentario usuario:references tarea:references contenido:text


Scaffold
Luego de generar el scaffold podemos observar que se genera el modelo con
sus respectivas relaciones, el controlador con todos los métodos del routes y las
vistas correspondientes al controlador.
Personalizar el Scaffold
Como se puede observar con scaffold ya tenemos todo generado sin embargo
en el controlador podemos notar que los métodos difieren un poco de los que
nosotros habíamos definido manualemente. Ademas que aun nos falta el
callback de devise para que no se puedan crear comentarios si no se han
logueado. Asi que en primer medida agreguemos ese callback.
Personalizar el Scaffold
Tambien por defecto el scaffold genera una hoja de estilos, la cual podemos
eliminar para que mantengamos nuestros estilos de Bootstrap. Y podemos
modificar un poco las vistas. Más adelante vamos a desarrollar los mecanismos
para relacionar en las vistas los comentarios con las tareas.
Nested resource – rutas anidadas
Como acabamos de mencionar la idea de los comentarios es que se relacionen
con las tareas ya que estos dependen de las tareas. Para hacer eso podemos
aprovechar una tecnica de rails llamada nested resource. La cual consiste en el
archivo routes anidar un resource dentro de otro.
Nested resource - formulario
Al realizar esto ahora los comentarios solo serán accesibles dentro de la ruta de
las tareas y en tal caso debemos modificar las vistas ya que como los
comentarios no son independientes vamos a agregar su visualización en las
vistas de tareas.

En primer lugar vamos a modificar la vista show de tareas habilitando el


formulario para agregar comentarios.
Nested resource – objeto padre
Ahora la vista de formularios para comentarios debe incluir también el objeto
padre de tal modo que debemos modificar el formulario. Y además inicializar
este recurso en el controlador tareas.
Nested resource – personalizar formulario
También debemos eliminar los campos para usuario y tareas del formulario del
comentario ya que estos no los debe agregar el usuario y de paso podemos
agregar un poco de CSS.
Nested resource – relaciones
Para poder relacionar los usuarios a los comentarios es necesario agregar la
relación en el modelo y modificar el créate de los comentarios para hacer uso de
devise.
Nested resource – cargar objeto padre
También debemos realizar un callback set_tarea para traer automáticamente la
tarea a la cual va a corresponder el comentario y asignarlo al comentario en el
créate.
Nested resource – modificar redirect
Para evitar errores a la hora de renderizar las vistas en las acciones de los
comentarios debemos redirigir ahora a la tarea de cada comentario. Vamos a
realizar este ajuste en todos los métodos.
Nested resource – mostrar comentarios
Ahora para poder mostrar todos los cometarios correspondientes a una tarea, en
primer lugar debemos agregar la relación en el modelo de tareas y luego
debemos editar la vista show para recorrer cada uno de los comentarios.
Nested resource – modificar rutas
Ahora vamos excluir rutas de los comentarios ya que no son necesarias y puede
ser confuso para los usuarios. En el archivo routes vamos a definir que los
únicos verbos disponibles para el recurso comentarios sean crear, destruir y
modificar. También podemos adicional eliminar esos métodos del controlador ya
que no se van a usar.

You might also like