Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Añadiendo el concepto de usuario

23/36
Recursos

Aportes 14

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Devise es una gema super completa para el manejo de registros y sesiones de usuarios.

Si tú te estás imaginando desde ahora que puedes usar devise para iniciar sesión con Github, Twitter y otros, déjame decirte que sí se puede. Dejaré un link a un repo de ejemplo, pero por ahora recomiendo que continúes con el curso, guardes el link y cuando te sientas con mayores habilidades en Rails trates de implementarlo en tu aplicación.
https://github.com/imhta/rails_6_devise_example

Con rails routes -c parametro es posible filtar un controlador en especifico, por ejemplo con
rails routes -c user “Solo mostrara las rutas del controlador user y todos los que tengan el parametro user en su nombre”

Si quieren entender mejor cómo funciona por debajo el sistema de autenticación de Devise, estos son algunos recursos que el mismo creador de la gema recomienda en la documentación si apenas te estás iniciando en el lenguaje para que logres comprender su funcionamiento.

Mini curso práctico de autenticación paso a paso con Rails

Tutorial de autenticación desde cero con Rails

Si tienen problema de usar el comando

rails g devise:install

y les da el siguiente error:

rails g devise:install
Running via Spring preloader in process 6623
Could not find generator 'devise:install'. 
Run `rails generate --help` for more options.

Usen el siguiente codigo, al menos a mi me funciono.

DISABLE_SPRING=1 bundle exec rails g devise:install

Antes que nada quiero decir que este curso me ha parecido excelente, solo para aportar en esta clase me gustaria mencionar que en el momento que no se tiene sesion iniciada, aparece el link para cerrar sesion, cosa que no deberia de ser asi, ya que aun no se tiene una sesion iniciada, investigando un poco sobre la gema devise lo resolvi de la siguiente forma:

- if user_signed_in?
      = link_to t('common.log_out'), destroy_user_session_path, method: :delete

Cabe mencionar que use un locale, cosa que deberan de cambiar o agregar, ademas de que mi archivo ya esta convertido en haml, de igual forma si mas adelante en el curso el profesor resuelve esto de una mejor manera deberemos de cambiarlo, espero sirva de algo 😃

Saludos:
Si estan teniendo un problema a la hora de crear un nuevo usuario puede ser porque se esta utilziando Rails 7 con esta gema devise.
en este post explican que una solución puede ser añadir la siguiente línea de código al archivo devise.rb (config/initializers/devise.rb)

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

Recuerden reiniciar su servidor de rails si lo tenían corriendo y después de esto todo debería de funcionar.

¡Hola! Si están teniendo el siguiente problema:
Parece ser que es debido a que el usuario tiene JavaScript desactivado, como indica el siguiente texto recopilado de la página:

method: symbol of HTTP verb - This modifier will dynamically create an HTML form and immediately submit the form for processing using the HTTP verb specified. Useful for having links perform a POST operation in dangerous actions like deleting a record (which search bots can follow while spidering your site). Supported verbs are :post, :delete, :patch, and :put. Note that if the user has JavaScript disabled, the request will fall back to using GET.

Exactamente no podría indicar a que se refiere esto, sin embargo, una solución temporal que se puede dar es que en vez de utilizar link_to utilicemos button_to.
Original

<%= link_to 'cerrar sesión', destroy_user_session_path, method: :delete %>

Usando button_to

<%= button_to "cerrar sesión", destroy_user_session_path, method: :delete %>

Hola yo hice algunos cambios en esta clase ya que me puse a invesgiar un poco sobre la gema.

Agregue vista home para tener de root en vez de la página por defecto de rails esto se hace creando una carpeta llamada home en views y crear un archivo en esa carpeta llamado home.html.haml. Con respecto al controlador le creé un método index

Agregué una logica en el application.html.erb para que dependiendo de si el usuario ha iniciado sesion o no aparezcan links de iniciar sesión o cerrar sesión.

<!DOCTYPE html>
<html>
  <head>
    <title>Organizador</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%if user_signed_in? %>
      <%=link_to 'Sing out', destroy_user_session_path, method: :delete%>
      <%=link_to 'Edit', edit_user_registration_path%>
      <%=link_to 'Tareas', tasks_path%>

    <%else%>
      <%=link_to 'Sing Up', new_user_registration_path%>
      <%=link_to 'Sing In', new_user_session_path%>

    <%end%>
    <%= yield %>
  </body>
</html>

El before_action :authenticate_user! lo utilicé en cada controller de los modelos para ue me dejara entrar a la pagina home sin iniciar sesión. (No se si esta es la mejor forma de hacerlo).

De esta manera cuando entro a localhost:3000/ entro a una pgina de bienvenida donde puedo iniciar sesión. Y al iniciar sesión vuelvo allí pero ahora solo aparecen los links de cerrar sesión de editar y para ir a las tareas.

Devise

Devise es una gema muy conocida y querida en el mundo de Rails, ya que permite generar modelos con un sistema de autenticación muy robusto y ya configurado. Repositorio: https://github.com/heartcombo/devise

Para instalar esta gema hay que agregarla al Gemfile y ejecutar el comando bundle install, seguido de esto hay que instalar el generador de devise con el comando rails g devise:install.

Ahora, para introducir usuarios al sistema es necesario crear un modelo, pero como este será un modelo con autenticación se va a generar con devise, con el comando devise g devise User. Una vez generado el modelo hay que ejecutar una migración de la forma habitual (rails db:migrate).

Devise tiene una serie de módulos que pueden ser implementados en los modelos para hacer un sistema de inicio de sesión de forma sencilla. Por defecto devise añade los módulos database_authenticable, registerable, recoverable, rememberable y validateable.

Rutas

En el archivo config>routes.rb divise agregó el método devise_for :users, que agregará automáticamente todas las rutas para users necesarias al sistema. Para consultar las rutas se puede usar el comando rails routes | grep users en la terminal, o entrar con el navegador a la ruta /rails/info/routes donde se mostrarán todas las rutas de la aplicación.

Con la ruta /users/sign_up puedes acceder a la GUI para registrar un nuevo usuario.


Para hacer que solo los usuarios que hayan iniciado sesión puedan acceder al sistema hay que indicar en el archivo application_controller.rb que solo los usuarios autenticados van a poder interactuar con los scaffolds creados.

Para esto se añade el método before_action :authenticate_user!.

Módulos de devise:

  • database_authenticable: Crea un hash y almacena una contraseña en la base de datos para validar la autenticidad de un usuario al iniciar sesión. La autenticación se puede realizar tanto a través de solicitudes POST como de autenticación básica HTTP.
  • omniauthable: Agrega soporte para OmniAuth.
  • confirmable: envía correos electrónicos con instrucciones de confirmación y verifica si una cuenta ya está confirmada durante el inicio de sesión.
  • cecoverable: Restablece la contraseña del usuario y envía instrucciones de reestablecimiento.
  • cegisterable: Maneja el registro de usuarios a través de un proceso de registro, lo que también les permite editar y destruir su cuenta.
  • cememberable: Maneja el registro de usuarios a través de un proceso de registro, lo que también les permite editar y destruir su cuenta.
  • trackable: Rastrea el recuento de inicios de sesión, las marcas de tiempo y la dirección IP.
  • timeoutable: Expira las sesiones que no han estado activas en un período de tiempo específico.
  • validatable: Proporciona validaciones de correo electrónico y contraseña. Es opcional y se puede personalizar, por lo que puede definir sus propias validaciones.
  • lockable: Locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.

Muy cool 😱 Me esta encantando Rails

Después de instalar devise, les puede pasar que al invocar comandos del devise, este no hace nada, para solucionar eso hacen lo siguiente:

> spring stop
> rails g devise:install

Buenisimo todo. Excelente profesor

Buenos apuntes.

Lo recomendable es usar rubygems para verificar la version que uno esta usando, asi de esta manera si otra persona quiere ver tu repo podra ejecutar la version correcta de cada gema.

gem 'devise', '~> 4.7', '>= 4.7.3'