Gema Devise - Comienzo

Gema Devise - Comienzo

Como realizar la primera configuración

La gema "Devise" es una popular biblioteca de autenticación de usuarios para el framework de Ruby on Rails. Proporciona un conjunto completo de características para gestionar el registro de usuarios, iniciar sesión, cerrar sesión, restablecer contraseñas y mucho más.

Devise facilita la implementación de un sistema de autenticación seguro y flexible en una aplicación Rails. Maneja tareas comunes como el almacenamiento seguro de contraseñas, la gestión de sesiones de usuario, la generación de tokens de autenticación y la validación de la presencia de usuarios autenticados en partes específicas de la aplicación.

Algunas de las características clave de Devise incluyen:

  1. Registro de usuarios: Permite a los usuarios registrarse en la aplicación proporcionando un formulario de registro y almacenando sus datos en la base de datos.

  2. Inicio de sesión: Proporciona un mecanismo para que los usuarios inicien sesión en la aplicación mediante un nombre de usuario (o correo electrónico) y una contraseña válidos.

  3. Cierre de sesión: Permite a los usuarios cerrar sesión de manera segura en la aplicación, eliminando su sesión activa.

  4. Recordatorio de contraseña: Permite a los usuarios solicitar un correo electrónico de restablecimiento de contraseña en caso de que olviden su contraseña.

  5. Confirmación de correo electrónico: Facilita el envío de correos electrónicos de confirmación para verificar la dirección de correo electrónico de un usuario recién registrado.

Devise también ofrece una amplia personalización a través de opciones de configuración y la posibilidad de anular sus controladores y vistas predeterminados para adaptarse a las necesidades específicas de la aplicación.

En resumen, Devise es una gema poderosa y flexible para implementar la autenticación de usuarios en Ruby on Rails, ahorrando tiempo y esfuerzo al proporcionar una funcionalidad de autenticación completa y segura.

Instalación Devise

Comando de instalación y agregar a gemas:

gem install devise #instala gema
bundle add devise #agrega gema a proyecto
rails generate devise:install #Instala y genera dependencias en nuestro proyecto

Dependiendo de la configuración de su aplicación, se puede requerir alguna configuración manual:

  1. Asegúrese de haber definido las opciones de URL predeterminadas en los archivos de entorno. Aquí hay un ejemplo de opciones de url predeterminadas apropiadas para un entorno de desarrollo en config/environments/development.rb:

     #config/enviroments/development.rb
     config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
    
     #config/enviroments/development.rb
     config.action_mailer.perform_caching = false
     config.action_mailer.delivery_method = :sendmail
     config.action_mailer.perform_deliveries = true
     config.action_mailer.raise_delivery_errors = true
     config.action_mailer.default_options = {from: 'no-reply@testemail.com'}
     config.action_mailer.delivery_method = :smtp
     config.action_mailer.smtp_settings = {
      address: 'smtp.gmail.com',
      port: 587,
      domain: 'example.com',
      user_name: [Your Gmail Acc],
      password: [Your Gmail password],
      authentication: 'plain',
      enable_starttls_auto: true
    
     #si no configura Gmail, puede usar mailtrap
     config.action_mailer.delivery_method = :smtp
     config.action_mailer.smtp_settings = {
       :user_name => ENV['username'],
       :password => ENV['password'],
       :address => 'sandbox.smtp.mailtrap.io',
       :host => 'sandbox.smtp.mailtrap.io',
       :port => '2525',
       :authentication => :cram_md5
     }
    

    En producción, :host debería ser establecido como el host real de su aplicación.

    • Requerido para todas las aplicaciones. *
  2. Asegúrese de haber definido root_url a algo en su archivo config/routes.rb. Por ejemplo:

     root to: "home#index"
    
    • No requerido para aplicaciones sólo de API. *
  3. Asegúrese de tener mensajes flash en app/views/layouts/application.html.erb. Por ejemplo:

     <p class="notice"><%= notice %></p>
     <p class="alert"><%= alert %></p>
    
    • No requerido para aplicaciones sólo de API. *
  4. Puede copiar las vistas de Devise (para personalización) en su aplicación ejecutando:

     rails g devise:views #instala las vistas de la gema devise en tu proyecto
    

    No requerido *

Si tiene más de un modelo de Devise en su aplicación (como Usery Admin), notará que Devise usa las mismas vistas para todos los modelos. Afortunadamente, Devise ofrece una manera sencilla de personalizar las vistas. Todo lo que necesitas hacer es configurarlo config.scoped_views = true dentro del config/initializers/devise.rbarchivo.

Después de hacerlo, podrá tener vistas basadas en roles como users/sessions/newy admins/sessions/new. Si no se encuentra ninguna vista dentro del alcance, Devise usará la vista predeterminada en devise/sessions/new. También puede utilizar el generador para generar vistas con alcance:

rails generate devise:views users

Posteriormente a las configuraciones iniciales, le pediremos a device que nos genere un modelo con sus propiedades:

rails generate devise User nombre:string edad:integer direccion:text telefono:string edad:integer #genera modelo y migración

Ahora pediremos que nos genere los controladores:

rails generate devise:controllers users #genera el controlador

Posteriormente, debemos ir a config/initializer/devise.rb, linea 266 aprox descomentaremos:

config.navigational_formats = ['*/*', :html, :turbo_stream]

Correremos las migraciones para generar las tablas pendientes, en este caso la de usuarios con Devise:

rails db:migrate

Las rutas principales que Devise crea por defecto incluyen:

  • Registrarse: /users/sign_up

  • Iniciar sesión: /users/sign_in

  • Cerrar sesión: /users/sign_out

  • Editar perfil: /users/edit

  • Restablecer contraseña: /users/password/new y /users/password/edit

Estas son algunas de las rutas principales que ofrece Devise para la autenticación de usuarios. Puedes personalizarlas o agregar más según tus necesidades en el archivo config/routes.rb de tu aplicación.

Recuerda que la ruta base /users puede cambiar dependiendo del nombre que hayas elegido para tu modelo de usuario al generar Devise. Por ejemplo, si elegiste Admin como nombre de modelo en lugar de User, las rutas se basarían en /admins en lugar de /users.

Filtros y ayudantes del controlador

Devise creará algunos ayudantes para usar dentro de sus controladores y vistas. Para configurar un controlador con autenticación de usuario, simplemente agregue esto before_action (suponiendo que su modelo de dispositivo sea 'User', si es otro, reemplace lo que corresponde):

before_action :authenticate_user!

Si el modelo de su dispositivo no es User, reemplace "_user" con "_yourmodel". La misma lógica se aplica a las instrucciones siguientes.

Para verificar si un usuario ha iniciado sesión, utilice la siguiente ayuda:

user_signed_in?

Para el usuario que ha iniciado sesión actualmente, esta ayuda está disponible:

current_user

Puedes acceder a la sesión para este ámbito:

user_session

*Aclaración:

Tenga en cuenta que si se llama a su modelo de Devise Memberen lugar de User, por ejemplo, los ayudantes disponibles son:

before_action :authenticate_member!

member_signed_in?

current_member

member_session