Autenticação com Devise

Criado por Piotr Steininger, @polishprince

Atualizado por Ernesto Jimenez, @ernesto_jimenez

Traduzido por Maujor, site do Maujor

Esse guia assume que você já criou a app RailsGirls como mostrado no tutorial para criação da app Rails Girls.

1.Adicione a gem Devise

Abra sua Gemfile e acrescente a seguinte linha de código:

gem 'devise'

e execute

bundle install

para instalar a gem. Não se esqueça de restartar o servidor Rails.

2.Configure devise na sua app

Execute o seguinte comando no terminal:

rails g devise:install

3.Configure Devise

Assegure-se de ter definido as opções default para URL no ambiente dos seus arquivos. Abra config/environments/development.rb e adicione a seguinte linha de código:

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

antes da palavra-chave end.

Abra app/views/layouts/application.html.erb e adicione o seguinte:

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

right above

   <%= yield %>

Abra app/views/ideas/show.html.erb e remova a seguinte linha:

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

Faça o mesmo em app/views/comments/show.html.erb. Aquelas linhas não são necessárias, pois nós acrescentamos notice no arquivo app/views/layouts/application.html.erb.

4.Configure o modelo de usuários

Usaremos um script gerador de empacotamento para criar o modelo de usuários.

   rails g devise user
   rake db:migrate

Coach: Explicar qual foi o modelo de usuário criado. Qual a finalidade dos campos?

5.Criando o primeiro usuário

Agora que está tudo devidamente configurado podemos criar nosso primeiro usuário. Devise gera todos os códigos e caminhos necessários para criar contas, log in, log out, etc.

Certifique-se de que o servidor rails está rodando, abra http://localhost:3000/users/sign_up e crie uma conta de usuário.

Agora só nos resta criar links e notificação de usuário logado no canto superior direito da barra de navegação.

Para fazer isso edite app/views/layouts/application.html.erb e acrescente as seguintes linhas:

<p class="navbar-text pull-right">
<% if user_signed_in? %>
  Logado como: <strong><%= current_user.email %></strong>.
  <%= link_to 'Editar perfil', edit_user_registration_path, :class => 'navbar-link' %> |
  <%= link_to "Logout", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %>
<% else %>
  <%= link_to "Registrar-se", new_user_registration_path, :class => 'navbar-link'  %> |
  <%= link_to "Login", new_user_session_path, :class => 'navbar-link'  %>
<% end %>

right after

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

Para finalizar force o usuário a ser redirecionado para a página de login se ele não estiver logado. Abra app/controllers/application_controller.rb e adicione a seguinte linha:

  before_action :authenticate_user!

depois de protect_from_forgery with: :exception.

Abra seu navegador e execute as ações de login e logout.

Coach: Falar sobre user_signed_in? e current_user helpers. Qual é a utilidade destas funcionalidades?

O que vem a seguir?