Problemas técnicos 1/8: Creación de Usuarios

Devise en Ruby on Rails

Artem Sapegin — Unsplash.com

Para la creación de usuarios utilicé una gema que se llama “Devise”.

Cómo funciona:

1. Instalar la gema en el GemFile

gem 'devise'

2. Correr en la terminal el siguiente código

$ rails generate devise:install

Este código instala todo lo necesario para que la gema funcione adecuadamente.

3. Generar el modelo que se quieres que inicie sesión en la plataforma, pueden ser Usuarios, Equipos, Nómadas, etc. Sustituye MODEL por el modelo que elijas.

$ rails generate devise MODEL

4. Corre la migration en tu base de datos

$ rake db:migrate

5. Crea las vistas para que pueda modificar y estilizar las pantallas de inicio de sesión, registro y editar sesión.

$ rails generate devise:views

Devise reconoce si tienes sesión iniciada o no, por lo que puedes dictar qué hacer en cada caso, por ejemplo:

<ul>
<% if user_signed_in? %>
  <li><a href="<%= destroy_user_session_path %>" data-method=’delete’>Cerrar Sesión</a></li>
<% else %>
<li><a href="<%= new_user_session_path %>"> Log in </a></li>
<li><a href="<%= new_user_registration_path %>"> Registrarse </a></li>
<% end %>
</ul>

Para incluir más campos a la modelo de usuarios, como nombre, teléfono, redes sociales, etc. Se tiene que hacer primero una migración en la terminal.

$ rails generate migration AddAttributesToUser name:string phone:string

Con esto se crea una migration la cual tenemos que incluir en nuestra base de datos.

$ rake db:migrate

Pero eso no es todo, aunque los datos estén en nuestra base de datos hay que decirle a nuestro controlador de Usuarios que los incluya cuando creemos o modifiquemos un formulario.

Pero como no tenemos controlador de usuarios tenemos que incluir en el controlador general de la aplicación: application_controller.rb

protected
def configure_permitted_parameters

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:email, :password, :password_confirmation) }
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :name, :phone) }
end

Con este código le estamos diciendo a nuestro controlador que cuando el usuario haga Sign Up, permita modificar de la base de datos los campos de email, password y password_confirmation.

Pero que cuando el usuario Edite la información de su cuenta, pueda modificar de la base de datos los campos de email, passoword, password_confirmation, current_password, name y phone.

Ahora lo único que falta es agregar los campos a los formularios de Editar Información del usuario y listo. (views/devise/registrations/edit.html.erb).

<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone %><br />
<%= f.text_field :phone %>
</div>

Listo, ya puedes modificar los datos en tu base de datos.

Ahora, lo único que tienes que hacer es especificar en los controladores que quieras que los usuarios se registren.

before_action :authenticate_user! #Si quieres que sea en todos las acciones de tu controlador o ...
before_action :authenticate_user!, only: [:new, :edit] #Si quieres sólo en algunas acciones