El autor seleccionó Girls Who Code para recibir una donación como parte del programa Write for Donations.
Introducción
La gema Devise es una solución de autenticación para aplicaciones Ruby on Rails; te ayuda a configurar la autenticación de usuarios lista para producción en tus proyectos sin tener que hacerlo todo por tu cuenta. Devise proporciona muchas características útiles, como el manejo de sesiones de usuario y la adición de soporte para el inicio de sesión de terceros con OAuth utilizando la gema OmniAuth. Devise también viene con módulos integrados para funcionalidades como restablecer contraseñas olvidadas, rastrear recuentos y marcas de tiempo de inicio de sesión, definir tiempos de espera, bloquear cuentas, y más.
Devise hace que la autenticación de usuarios sea tan simple como inicializar la gema y crear un modelo User
con las características requeridas. Si tuvieras que construir la autenticación de usuarios desde cero, tendrías que escribir código y pruebas para todas las características que deseas, y manejar todos los casos extremos en el manejo de sesiones, almacenamiento de cookies y mantener los datos seguros. Al usar la gema Devise, evitas hacer todo eso por ti mismo y puedes concentrarte en construir tu aplicación.
En este tutorial, crearás una aplicación web mínima con Rails e instalarás Devise, lo que permitirá a los usuarios crear cuentas, iniciar sesión y cerrar sesión en sus cuentas.
Prerrequisitos
Para completar este tutorial, necesitarás:
- A local development environment for Ruby on Rails. For Linux, you can follow our tutorial How To Install Ruby on Rails with
rvm
on Ubuntu 20.04 or use thervm
product docs for installing on Mac or Windows. You can also refer to the Ruby project docs to install Ruby directly in your system. To install the Rails gem, you can use the official Rails documentation. The Devise gem requires Ruby version 2.1.0 or greater; this tutorial was tested using Ruby version 3.0.2 and Rails version 7.0.3. - Node.js instalado en tu máquina. Algunas características de Rails, como el Asset Pipeline, dependen de un tiempo de ejecución de JavaScript. Node.js proporciona esta funcionalidad. Para Ubuntu, instala Node.js utilizando el PPA oficial, como se explica en la opción 2 de Cómo instalar Node.js en Ubuntu 20.04. Para Mac OS, sigue nuestra guía Cómo instalar Node.js y crear un entorno de desarrollo local en MacOS.
- Familiaridad con Ruby y el framework Ruby on Rails. Puedes consultar los primeros tutoriales de nuestra serie Rails on Containers, o puedes utilizar las Guías oficiales de Rails.
Paso 1 — Crear una Nueva Aplicación en Rails
En este paso, crearás una nueva aplicación en Rails y la ejecutarás localmente en tu máquina. Utilizarás la utilidad de línea de comandos rails
para inicializar el proyecto.
Ejecuta el siguiente comando desde la terminal:
- rails new blog
El comando rails new
creará un nuevo proyecto en Rails en el directorio blog
, que incluye varios archivos y carpetas generados. Uno de ellos es el Gemfile, que contiene las dependencias del proyecto. Configurarás el Gemfile para usar Devise en Paso 3 — Instalación y Configuración de Devise.
Nota: Si recibes un error que dice No se pudo encontrar la gema
, puedes resolverlo cambiando al directorio de tu proyecto (cd blog
) y ejecutando bundle install
, que instalará todas las gemas enumeradas en tu Gemfile
.
Puedes abrir este directorio en tu editor de texto favorito o navegar hasta él utilizando la terminal:
- cd blog
Para iniciar la aplicación Rails, inicia el servidor de desarrollo con el comando rails server
desde el directorio del proyecto:
- bundle exec rails server
Este comando iniciará el servidor de desarrollo de Rails. Abre http://localhost:3000
en tu navegador para acceder a la página de bienvenida de Rails. Rails utiliza el puerto 3000
para ejecutar la aplicación si no has proporcionado un número de puerto alternativo.
**Nota:* Añadir bundle exec
al comando lo ejecuta en el contexto del bundle actual. Esto significa que solo se utilizará el Gemfile específico del proyecto y las versiones de gemas definidas en él. Esto es útil si tienes diferentes versiones de las mismas gemas instaladas a nivel global.
Ahora has inicializado una nueva aplicación de Rails, a la que agregarás autenticación de usuario en un paso posterior. En el siguiente paso, sustituirás la página de inicio predeterminada que proporciona Rails por una página de inicio personalizada, lo que facilitará la navegación a través de la aplicación de ejemplo una vez que hayas añadido Devise. Después de crear una nueva página de inicio, agregarás enlaces para que el usuario se registre e inicie sesión en la aplicación.
Paso 2 — Crear una Página de Inicio
Ahora que tienes una aplicación básica de Rails, reemplazarás la página predeterminada que proporciona Rails con tu propia página de inicio. Una página de inicio personalizada facilitará mostrar al usuario enlaces para registrarse e iniciar sesión en la URL raíz de la aplicación. Añadirás enlaces para iniciar sesión
y registrarse
en pasos posteriores.
Para crear tu página de inicio, deberás realizar lo siguiente:
- Agrega la ruta en el archivo
config/routes.rb
. - Crea un
HomeController
que manejará las solicitudes a esta ruta. - Crea un archivo de vista que se renderizará cuando accedas a la ruta.
Comienza por agregar la ruta raíz al archivo routes.rb
que se generó al crear el proyecto.
Usando nano
o tu editor de texto favorito, abre el archivo config/routes.rb
que se generó anteriormente:
- nano config/routes.rb
Agrega la línea resaltada:
Rails.application.routes.draw do
root to: "home#index"
end
root to:
define qué acción del controlador manejará las solicitudes a la ruta raíz, en este caso, la ruta será http://localhost:3000
, que es el puerto predeterminado para las aplicaciones Rails. Las solicitudes a esta ruta serán manejadas por la acción index
en el controlador home
. Este archivo aún no existe, así que crearás el archivo app/controllers/home_controller.rb
a continuación.
Guarda y cierra config/routes.rb
. Con nano
, presiona CTRL+X
para salir, Y
para guardar y ENTER
para confirmar el nombre del archivo y cerrar el archivo.
A continuación, crea el archivo app/controllers/home_controller.rb
y agrega las siguientes líneas:
class HomeController < ApplicationController
def index
render
end
end
Este es un HomeController
básico con un método index
que hace una cosa: renderizar el archivo de vista asociado con la acción del controlador.
En este caso, el archivo de vista será el archivo app/views/home/index.html.erb
. Necesitarás crear este archivo así como el directorio home
dentro del directorio app/views
.
Guarda y cierra el archivo del controlador home
.
A continuación, crea el directorio home
en el directorio app/views
:
- mkdir app/views/home/
El directorio home
contendrá todas las vistas para un controlador de Rails particular.
Luego, crea el archivo app/views/home/index.html.erb
y añade las siguientes líneas:
<h1>Hello DigitalOcean!</h1>
app/views/home/index.html.erb
es el archivo de vista que la acción index
del controlador Home
va a renderizar. Este es un archivo HTML donde puedes incrustar código Ruby. Cuando la ruta definida para la acción particular del controlador es activada, este archivo de vista es renderizado en el navegador del usuario.
Guarda y cierra tu archivo.
Para ver los cambios en la URL raíz, abre http://localhost:3000
en tu navegador (o refresca la página si ya está abierta). La página de inicio actualizada será similar a esta:
Puedes personalizar esta página aún más si es necesario, pero esto es todo lo que se necesita para este tutorial.
Ahora que tienes una aplicación Rails simple con su propia página de inicio, agregarás autenticación de usuario con la gema Devise.
Paso 3 — Instalación y Configuración de Devise
En este paso, instalarás y configurarás Devise en tu aplicación de Rails para poder utilizar los métodos y ayudantes que vienen con la gema. Utilizarás el método user_signed_in?
para verificar la información de sesión de cualquier usuario registrado almacenada en las cookies del navegador. También usarás el ayudante current_user
para obtener los detalles de la cuenta que está actualmente registrada. Ambos métodos están integrados en Devise y puedes usarlos directamente en tu aplicación sin necesidad de escribir código adicional. Puedes obtener más información sobre estos métodos ayudantes desde la página de GitHub del proyecto Devise.
El primer paso para instalar Devise es agregar la gema a tu Gemfile, que contiene información sobre todas las dependencias necesarias para ejecutar tu proyecto Ruby. En este caso, cuando inicializas la aplicación de Rails, el Gemfile generado ya tiene todas las gemas básicas requeridas para que Rails funcione.
Pero antes de realizar cambios en tu Gemfile, detén el servidor de desarrollo que iniciaste en el último paso presionando CTRL+C
en la terminal donde se está ejecutando.
Luego, abre tu Gemfile para editarlo. Para agregar la gema Devise, agrega la línea resaltada hacia el final del archivo, pero fuera de los grupos development
y test
:
# ...
# Reduce los tiempos de arranque mediante el almacenamiento en caché; necesario en config/boot.rb
gem "bootsnap", require: false
# Usa variantes de Active Storage [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gema "image_processing", "~> 1.2"
gem "devise"
group :development, :test do
# Consulta https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri mingw x64_mingw ]
end
# ...
Guarda y cierra tu archivo.
A continuación, instalarás la gema recién agregada ejecutando el comando bundle install
en la terminal. Desde el directorio de tu proyecto (blog
), ejecuta el siguiente comando:
- bundle install
Este comando instalará la gema Devise en tu proyecto, lo que te permitirá usar el comando devise
con la utilidad de línea de comandos rails
y configurar la autenticación.
Para configurar Devise en tu proyecto, ejecuta el comando generador:
- bundle exec rails g devise:install
La bandera g
en el comando anterior significa generate
y se utiliza para invocar a los generadores de Rails. Los generadores crearán archivos que pueden servir como punto de partida. Puedes leer las guías de Rails para obtener más información sobre los generadores de Rails.
El comando anterior generará varios archivos, incluido el archivo inicializador y el archivo de localidades i18n para Devise. El archivo inicializador, explicado en detalle a continuación, se utiliza para configurar Devise cuando inicias la aplicación por primera vez. i18n significa internacionalización, que es un estándar para ayudarte a ejecutar tu aplicación en diferentes idiomas.
En este punto, también se imprimirán algunas instrucciones en la terminal, como sigue:
Output===============================================================================
Depending on your application's configuration some manual setup may be required:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
===============================================================================
Aunque esta configuración manual no es necesaria para este tutorial, más adelante agregarás mensajes flash para notice
y alert
en este paso.
Has terminado de instalar Devise. A continuación, necesitarás configurar algunas cosas en el archivo inicializador de Devise que acabas de generar.
Cuando ejecutaste el comando devise:install
, generaste config/initializers/devise.rb
, que es el archivo inicializador para Devise. Cada vez que inicies tu aplicación Rails, Rails cargará todas las gemas y complementos, y luego cargará todos los archivos inicializadores. Puedes configurar ajustes específicos para diferentes partes de tu aplicación desde estos archivos inicializadores. Todos estos inicializadores residen en el directorio config/initializers/
, y es ahí donde la gema Devise crea su inicializador también.
Abre config/initializers/devise.rb
para editarlo. En el archivo, localiza el bloque Devise.setup
y agrega la siguiente línea resaltada (puede haber otros bloques de código dentro del bloque Devise.setup
, pero puedes ignorar esos).
Devise.setup do |config|
# ...
config.navigational_formats = ['*/*', :html, :turbo_stream]
# ...
end
Esta línea agrega turbo_stream
como un formato de navegación. Los Turbo Streams son parte de Turbo, que te permite enviar HTML renderizado en el servidor y renderizar páginas sin utilizar mucho JavaScript. Necesitas agregar esto para que Devise 4.8.1
funcione con Rails 7; de lo contrario, obtendrás un error de undefined method user_url
.
Guarda y cierra el archivo.
A continuación, también agregarás los mensajes flash de notificación y alerta que fueron resaltados en las instrucciones impresas anteriormente. Las etiquetas alert
y notice
son donde aparecerían mensajes como “Contraseña incorrecta” y similares en la interfaz de usuario. Siempre puedes implementar mensajes de alerta personalizados en tu aplicación (por ejemplo, si estás utilizando interceptores de Axios con React como tu frontend), pero para este tutorial, completarás la configuración mínima de Devise.
Abre app/views/layouts/application.html.erb
para editarlo. Agrega las etiquetas para los mensajes "notice"
y "alert"
dentro de la etiqueta body, justo encima de <%= yield %>
:
...
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
Cuando la vista se renderiza en el navegador, el <%= yield %>
bloque será reemplazado por el contenido de tus archivos de vista. En tu archivo de vista, solo tenías la etiqueta p
. Esta etiqueta de rendimiento será reemplazada con ese contenido.
Guarda y cierra tu archivo.
En este paso, has instalado y configurado Devise en tu proyecto. En el siguiente paso, crearás el modelo de usuario para tu aplicación con Devise y configurarás la autenticación de usuario.
Paso 4 — Creando el Modelo de Usuario con Devise
Ahora estás listo para generar el modelo de usuario con Devise, lo que creará el archivo de modelo necesario y generará una migración que puedes ejecutar para crear una tabla users
en tu aplicación. Cada vez que alguien se registre, necesitarás crear un nuevo registro en la tabla users
en la base de datos. Con el modelo de usuario, puedes manipular estos registros de la base de datos desde tu vista frontend.
En este paso, generarás un modelo de usuario, inspeccionarás la configuración predeterminada y luego ejecutarás la migración para actualizar tu base de datos.
Dado que Rails es un framework de modelo-vista-controlador (MVC), cada tabla de base de datos tiene una clase asociada que se puede usar para trabajar con los datos en la tabla. En este caso, si creas una tabla users
, puedes usar el modelo User
para realizar operaciones como User.first
o User.find_by_email("[email protected]")
. Puedes crear este modelo haciendo una clase normal heredada de ApplicationRecord
en Rails, pero generar un modelo de usuario con Devise te proporciona muchos métodos que puedes usar para la autenticación.
Para crear tu usuario de Devise, ejecuta el siguiente comando generador:
- bundle exec rails g devise user
La siguiente salida se imprimirá en la pantalla:
Outputinvoke active_record
create db/migrate/20220908152949_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
La salida muestra que Devise generó varios archivos, creó pruebas y añadió rutas. El primer archivo, db/migrate/20220908152949_devise_create_users.rb
, es un archivo de migración para crear la tabla users
en tu base de datos. Un archivo de migración de Rails describe los cambios que deben realizarse en la base de datos. El nombre de cada migración contendrá una marca de tiempo para que Rails sepa en qué orden realizar esos cambios.
Devise también creó el archivo del modelo de usuario (app/models/user.rb
), junto con pruebas para el mismo. La última línea de la salida indica que se añadió una ruta al archivo existente config/routes.rb
. Devise añade automáticamente todas las rutas como /users/sign_up
y /users/sign_out
utilizando el ayudante devise_for :users
.
Antes de ejecutar el archivo de migración y crear la tabla users
en la base de datos, revisemos estos archivos generados. Esto te ayudará a entender la configuración que Devise generó para que sepas qué está sucediendo cuando ejecutes la migración.
Empieza abriendo el archivo de migración (db/migrate/20220908152949_devise_create_users.rb
) para revisar el código predeterminado:
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[7.0]
def change
create_table :users do |t|
## Autenticación de base de datos
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recuperable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Recordable
t.datetime :remember_created_at
## Rastreable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Solo si se utiliza reconformable
Devise incluye muchas opciones útiles, como campos para el token de restablecimiento de contraseña y el momento de envío del último token, y así sucesivamente. También hay líneas para características como la confirmación por correo electrónico, el bloqueo del usuario después de intentos fallidos de inicio de sesión e incluso el seguimiento de los detalles del inicio de sesión.
Dado que no necesitas realizar cambios, cierra el archivo de migración.
Devise también generó el archivo del modelo User
. Este estará disponible en el directorio app/models/
.
Abre el archivo del modelo app/models/user.rb
para revisar el código predeterminado:
class User < ApplicationRecord
# Incluye módulos Devise predeterminados. Otros disponibles son:
# :confirmable, :lockable, :timeoutable, :trackable y :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
A few options are added by Devise to configure how the user model works. The basic modules (database_authenticatable
, registerable
, recoverable
, rememberable
, and validatable
) are already included. There are some additional options commented out, corresponding to the extra features you saw in the migration file. You can add these modules to the model file and configure the migration, depending on how much functionality you need in your application.
Esto es lo que hacen los módulos básicos:
database_authenticatable
: Los usuarios pueden autenticarse con un campo de inicio de sesión y contraseña. Su contraseña cifrada se almacenará en tu base de datos.registerable
: Los usuarios pueden registrarse y editar o eliminar sus cuentas.recoverable
: Los usuarios pueden restablecer su contraseña y recuperar sus cuentas si olvidan sus credenciales.rememberable
: Este módulo recuerda las sesiones de un usuario guardando la información en una cookie del navegador.validatable
: Este módulo proporciona validaciones para los campos de correo electrónico y contraseña del usuario. (Por ejemplo, tu aplicación solicita que la contraseña tenga al menos seis caracteres, aunque no hayas definido validaciones personalizadas en tu modelo.)
Estos módulos básicos se incluyen en el modelo de Usuario que acabas de generar. Puedes encontrar una lista completa de módulos que vienen con Devise en el repositorio de GitHub de Devise.
No es necesario realizar ningún cambio, así que cierra el archivo del modelo User
.
Otra actualización es que el archivo `config/routes.rb` ha sido modificado para agregar una línea `devise_for` para los `usuarios`:
Rails.application.routes.draw do
devise_for :users
root "home#index"
end
Este es un método útil que define todas las rutas requeridas relacionadas con la autenticación de usuario como `/users/sign_in`, `/users/sign_out` y `/users/password/new`. Devise se encarga de todo eso por ti e incluso mantiene limpio el archivo de rutas. Si deseas entender cómo agregar `devise_for :usuarios` se traduce automáticamente a todas estas rutas, puedes revisar el código fuente del método en el repositorio de GitHub de Devise .
No necesitas hacer ningún cambio aquí, así que cierra el archivo `config/routes.rb`.
Para aprender qué rutas están definidas en tu aplicación, puedes listarlas ejecutando el siguiente comando:
- bundle exec rails routes
Este comando imprime todas las rutas de la aplicación y los controladores con los que se están procesando estas rutas. En el caso de la autenticación, todas estas rutas fueron creadas por Devise, y no tuviste que agregarlas manualmente.
La salida será larga, pero aquí tienes un fragmento que muestra algunas de las rutas:
Prefix | Verb | URI Pattern | Controller#Action |
---|---|---|---|
new_user_session | GET | /users/sign_in(.:format) | devise/sessions#new |
user_session | POST | /users/sign_in(.:format) | devise/sessions#create |
destroy_user_session | DELETE | /users/sign_out(.:format) | devise/sessions#destroy |
new_user_password | GET | /users/password/new(.:format) | devise/passwords#new |
edit_user_password | GET | /users/password/edit(.:format) | devise/passwords#edit |
user_password | PATCH | /users/password(.:format) | devise/passwords#update |
PUT | /users/password(.:format) | devise/passwords#update | |
POST | /users/password(.:format) | devise/passwords#create | |
cancel_user_registration | GET | /users/cancel(.:format) | devise/registrations#cancel |
Las rutas enumeradas en la salida son las rutas que fueron agregadas por Devise cuando incluiste la línea `devise_for :usuarios` en tu archivo de rutas. Estas son las rutas para acciones como `iniciar sesión`, `registrarse`, `restablecer contraseña`, y así sucesivamente.
Ahora que has revisado los archivos y la configuración generados por Devise, puedes ejecutar la migración que generaste al principio de este paso con el siguiente comando:
- bundle exec rails db:migrate
El comando anterior realizará todos los cambios en cada uno de los archivos de migración en tu base de datos. Los cambios deben realizarse uno tras otro, tal como están definidos en los archivos. Rails necesita conocer la secuencia en la que deben ejecutarse las migraciones, por eso los archivos se crean con marcas de tiempo en sus nombres.
La salida, como la siguiente, se imprimirá en la pantalla:
Output== 20220908152949 DeviseCreateUsers: migrating ================================
-- create_table(:users)
-> 0.0040s
-- add_index(:users, :email, {:unique=>true})
-> 0.0012s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0011s
== 20220908152949 DeviseCreateUsers: migrated (0.0074s) =======================
Una vez que se haya ejecutado la migración, tu base de datos estará configurada. Has hecho todo lo necesario para establecer la autenticación de usuario en tu proyecto.
En este punto, reinicia tu servidor de Rails:
- bundle exec rails server
El archivo de inicialización mencionado anteriormente se carga solo cuando Rails se está iniciando. Necesitas reiniciar el servidor para que Rails pueda cargar el nuevo archivo de inicialización de Devise y configurar todo para que la autenticación de usuario funcione.
Ve a http://localhost:3000/users/sign_up
en tu navegador, donde encontrarás un formulario de registro para crear una cuenta ingresando un correo electrónico y una contraseña. (En el siguiente paso, agregarás botones para registrarse e iniciar sesión en la página de inicio para que sea más fácil para el lector navegar a esta URL.)
Para probar la autenticación, ingresa un correo electrónico de prueba como [email protected]
y una contraseña.
Una vez que te registres, serás redirigido a la página principal, que muestra ¡Hola DigitalOcean! así como un mensaje que dice que te has registrado exitosamente, así:
Este aviso de éxito de registro se renderiza en la etiqueta <p class="notice"><%= notice %></p>
que has añadido en el archivo application.html.erb
.
En este punto, has configurado la autenticación de usuario con Devise en tu proyecto y te has registrado usando una cuenta de muestra. Configuraste Devise para satisfacer las necesidades de tu aplicación, mientras que Devise generó las rutas, vistas y controladores que facilitan esta experiencia de registro de usuario.
Ahora que has confirmado que el proceso de registro funciona como se esperaba, tu próximo paso es añadir esta autenticación a la página de inicio que creaste en Paso 2. En el siguiente paso, vincularás la página de registro con la página de inicio para que los usuarios no tengan que navegar a una URL específica para registrarse, como tuviste que hacer aquí.
Paso 5 — Vincular la Autenticación a la Página de Inicio
Tienes todas las funcionalidades configuradas en tu proyecto, pero aún necesitas conectar las páginas creadas por Devise con tu página de inicio. En el paso anterior, visitaste manualmente la página /users/sign_up
para iniciar sesión. En este paso, vincularás todas las páginas agregando los enlaces requeridos a tu página de inicio. También mostrarás condicionalmente a los usuarios los enlaces para iniciar sesión o cerrar sesión en la aplicación según su estado.
Lograrás esto con algunos métodos auxiliares de Devise. La gema Devise viene con muchos métodos auxiliares que puedes utilizar sin tener que implementar todo por ti mismo. Esto hace que el código sea más fácil de leer y mantener.
Comenzarás agregando código para verificar si el usuario ha iniciado sesión. Si lo están, la página de inicio mostrará su correo electrónico y un enlace para cerrar sesión en la aplicación. Si el usuario no ha iniciado sesión, la página de inicio mostrará un enlace para ir a la página de inicio de sesión.
Abre el archivo app/views/home/index.html.erb
para editarlo y agrega las líneas resaltadas:
<% if user_signed_in? %>
<div> Welcome <%= current_user.email %> </div>
<%= button_to "Sign out", destroy_user_session_path, method: :delete %>
<% else %>
<%= button_to "Sign in", new_user_session_path %>
<% end %>
<h1>Hello DigitalOcean!</h1>
user_signed_in?
proviene de los métodos auxiliares asociados con los controladores de Devise. Verifica si el usuario ha iniciado sesión o no y devuelve un valor booleano true
o false
. Puedes usar este resultado para programar otras funcionalidades en tu aplicación, como mostrar la información de la cuenta del usuario si han iniciado sesión. Para más detalles sobre este método auxiliar, puedes consultar el código fuente en el Repositorio de GitHub de Devise.
current_user
es un ayudante de Devise que accede a los detalles del usuario que actualmente ha iniciado sesión en la aplicación. Por ejemplo, si inicias sesión con [email protected]
, el ayudante current_user
devolverá el modelo de usuario para [email protected]
. Entonces, al usar current_user.email
, obtendrías [email protected]
como resultado. Al usar Devise, evitas tener que implementar esta lógica desde cero, lo que te ahorra tiempo y esfuerzo.
Finalmente, con este código, agregaste los botones Inicio de sesión y Cerrar sesión a la página de inicio. Dependiendo del resultado del método de ayuda user_signed_in?
, mostrarás la opción de iniciar sesión o cerrar sesión utilizando los recién agregados botones Iniciar sesión y Cerrar sesión.
Estás utilizando el método button_to
para definir un botón que lleva al usuario a una ruta específica. También estás utilizando métodos auxiliares para obtener estas rutas: destroy_user_session_path
se resuelve a /users/sign_out
y new_user_session_path
se resuelve a /users/sign_in
. (Puedes revisar la lista completa de ayudantes de URL de ruta ejecutando bundle exec rails routes
, como se mencionó en un paso anterior.)
Guarda y cierra el archivo.
Actualiza tu página en el navegador para revisar los cambios.
Si aún no has probado a registrarte para tu aplicación, puedes visitar la ruta /users/sign_in
haciendo clic en el botón Iniciar sesión en tu página. Desde aquí, puedes proceder a crear una nueva cuenta haciendo clic en el enlace Registrarse en la parte inferior. Ingresa un correo electrónico de prueba como [email protected]
y una contraseña. Una vez que te hayas registrado, volverás a la página de inicio. Ahora la página de inicio muestra la dirección de correo electrónico del usuario que ha iniciado sesión actualmente, junto con un botón Cerrar sesión, como se muestra aquí:
También recibirás un mensaje que dice, Te has registrado exitosamente
.
Y con eso, has integrado con éxito la gema Devise y has configurado la autenticación de usuario en tu aplicación.
Conclusión
En este tutorial, utilizaste Devise para agregar autenticación de usuario a una aplicación Rails. Utilizando los métodos auxiliares de Devise, creaste una aplicación donde los usuarios pueden crear cuentas, registrarse y cerrar sesión.
Para obtener una mejor comprensión de Devise y de los ayudantes y métodos adicionales, consulta el archivo README en el repositorio de GitHub de Devise. Como próximo paso en este tutorial, puedes intentar renderizar condicionalmente el saludo “¡Hola mundo!” en la página con algo como Hola nombre de usuario
dependiendo de si el usuario ha iniciado sesión o no.
Puedes encontrar el código de este proyecto en el repositorio de GitHub de la Comunidad de DigitalOcean.