Devise
Last updated
Last updated
es una gema que facilita la implementación de la autenticación en nuestras aplicaciones.
Generalmente lo que hago cuando voy a utilizar es ir a la documentación y seguir los pasos, pero los copiamos acá por referencia.
Vamos a continuar trabajando en nuestra aplicación de libros. Puedes utilizar la aplicación que has venido construyendo o clonar el proyecto y descargar la rama step-5
:
El primer paso es agregar la gema al final del archivo Gemfile
:
Ejecuta bundle install
para instalarla.
Ejecuta el generador de :
El siguiente paso es crear el modelo de los usuarios de la aplicación, generalmente User
:
Ejecuta rails db:migrate
para correr las migraciones.
Asumiendo que el usuario es User
, crea, entre otras, las siguientes rutas:
Ruta
Nombre
Descripción
GET /users/sign_up
new_user_registration
Formulario de registro
POST /users
Registrarse
GET /users/sign_in
new_user_session
Formulario de login
POST /users/sign_in
Login
DELETE /users/sign_out
destroy_user_session
Salir
Para ver el listado completo ejecuta rails routes
. Las demás rutas son, en su mayoría, para el manejo de contraseñas (recuperar, cambiar, etc).
Para que el usuario pueda registrarse, ingresar y salir de nuestra aplicación vamos a agregar algunos links en el layout de la aplicación.
Abre app/views/layouts/application.html.erb
y agrega lo siguiente después del <body>
, antes de <%= yield %>
:
Asumiendo que tu usuario se llama User
, el filtro que puedes agregar sobre los controladores que quieres proteger es el siguiente:
En nuestra aplicación de libros vamos a proteger todas las acciones del controlador books
exceptuando index
y show
que son las que nos van a permitir listar y mostrar los detalles de un libro.
Agrega la siguiente línea dentro de la clase:
Los métodos de ayuda a los que vas a tener acceso en los controladores y vistas son los siguientes:
Método
Descripción
signed_in?
Retorna true
si el usuario está autenticado, false
de lo contrario
current_user
Retorna el usuario que está autenticado o nil
user_session
Retorna la sesión del usuario
En nuestra aplicación sólo vamos a mostrar los links de "Editar" y "Eliminar" si el usuario está autenticada. Cambia el archivo app/views/books/index.html.erb
para que quede los links queden de la siguiente forma:
Ahora sólo deberían aparecer los links de "Editar" y "Eliminar" si el usuario está autenticado.
Este es un modelo normal pero utiliza el método devise
que recibe una serie de módulos que puedes activar o desactivar.
Los módulos que vienen activados son los siguientes:
Módulo
Descripción
database_authenticatable
Los usuarios se van a poder autenticar con un nombre de usuario y contraseña almacenado en la base de datos.
registereable
Los usuarios van a poder registrarse, actualizar y eliminar su perfil.
recoverable
Los usuarios van a poder recuperar su contraseña
rememberable
Habilita la opción "Recordarme" en el login
trackable
Habilita el seguimiento al usuario (de dónde se autenticó, cuantas veces, de qué IP, etc.)
validatable
Valida el email y el password
Para generar las vistas utiliza el siguiente comando:
Para generar los controladores utiliza el siguiente comando:
Luego incorpora el controlador que quieras sobreescribir en routes de la siguiente manera:
crea algunos métodos de ayuda y filtros para que puedas manejar la autenticación en tu aplicación.
Asumiendo que al usuario lo llamaste User
al generarlo, el modelo que genera es el siguiente:
Por defecto no vas a ver vistas ni controladores de . Sin embargo, si quieres modificarlos puedes decirle a que los genere.
De esta forma puedes modificar las vistas y cambiar funcionalidad de .