Agregando Autentificación con Devise

Created by Piotr Steininger, @polishprince

Updated by Ernesto Jimenez, @ernesto_jimenez

**Esta guía asume que ya tienes creada una aplicación RailsGirls ** siguiendo la guía desarrolla tu aplicación.

0.Agrega gema devise

Abre tu Gemfile y agrega esta linea

gem 'devise'

y ejecute

bundle install

para instalar la gema

1.Configure devise en tu aplicación

Ejecute el siguiente comando en la terminal.

rails g devise:install

2.Configure Devise

Asegúrese de tener definido las opciones por defecto para url en tus archivos “environments”. Abre config/environments/development.rb y adicione esta línea:

   config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

Antes de la palabra clave end.

Abre app/views/layouts/application.html.erb y adicione:

<% if notice %>
  <p class="alert alert-success"><%= notice %></p>
<% end %>
<% if alert %>
  <p class="alert alert-danger"><%= alert %></p>
<% end %>

justo encima de

   <%= yield %>

Finalmente, si tu intención es publicar en heroku debes abrir config/application.rb y adicionar esta línea:

  config.assets.initialize_on_precompile = false

como tercera línea desde la parte de abajo (antes de las dos ultimas palabras claves end)

3.Configurar el modelo User (usuario)

Abrir el archivo app/views/ideas/show.html.erb y quita la línea que dice:

<p id="notice"><%= notice %></p>

Haz lo mismo para app/views/comments/show.html.erb. Estas líneas no son necesarias porque ya hemos colocado la notificación en el archivo app/views/layouts/application.html.erb.

Usaremos un script generador de paquetes para crear el modelo User(usuario)

   rails g devise user
   rake db:migrate

Coach: Explique cual es el modelo que fue generado. ¿Cuáles son sus campos?

4.Crea tu primer usuario

Ahora que tienes configurado todo puedes crear tu primer usuario. Devise crea todo el código y rutas requeridas para crear cuentas, inicio de sesión, cierre de sesión, etc.

Asegúrese que su servidor rails se esta ejecutando, abre http://localhost:3000/users/sign_up, o en el caso de un servicio en la nube, adicione /users/signup al url de la vista previa.

Cree una cuenta de usuario.

Todo lo que necesitamos hacer ahora es adicionar apropiadamente links o avisos acerca del usuario que inicio sesión en la esquina superior derecha de la barra de navegación.

Para lograr hacer esto, editar app/views/layouts/application.html.erb y agregar:

<p class="navbar-text pull-right">
<% if user_signed_in? %>
  Logged in as <strong><%= current_user.email %></strong>.
  <%= link_to 'Edit profile', edit_user_registration_path, :class => 'navbar-link' %> |
  <%= link_to "Logout", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %>
<% else %>
  <%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link'  %> |
  <%= link_to "Login", new_user_session_path, :class => 'navbar-link'  %>
<% end %>

Justo despúes de

<ul class="nav">
  <li class="active"><a href="/ideas">Ideas</a></li>
</ul>

Finalmente, fuerza al usuario a redirigirse a la página de login si es que no se encuentra loggeado. Abre app/controllers/application_controller.rb y agrega:

  before_action :authenticate_user!

después protect_from_forgery with: :exception.

Abre tu navegador y prueba iniciando y cerrando una sesión.

Coach: Hable acerca del user_signed_in? y current_user helpers. ¿Por qué son útiles?

¿Qué sigue?