I – Introdução
- Neste post vamos mostrar como implementar a autenticação básica num app web usando a gem Devise com o Rails versão 3.2.1.
- Da autoria da Plataforma Tecnologia, a gem Devise é uma solução flexível para criar aplicações web com o recurso de autenticação.
- Além de permitir que usuários do app web realizem as operações de “sign in” e “sign up”, oferece recursos que são comuns para app que necessitam de gerenciamento de usuários.
- Neste artigo vamos continuar a construir um app web, que iniciamos anteriormente.
- O código fonte gerado neste artigo, está hospedado no Github em https://github.com/sergiosouzalima/service_desk
II – Principais tecnologias usadas neste artigo
- Linux Ubuntu 11.10
- Ruby 1.9.2
- Rails 3.2.1
- gem Devise 2.0
III – O que não precisamos instalar
- Git, RVM, openssl, sqlite3 e outros pacotes necessários.
- Como dependemos de instalações e configurações anteriores, caso seu ambiente não esteja preparado, veja os posts:
- Para instalar a versão do Rails 3.2.1, siga o tutorial acima (item 1 e 2). Apenas informe a versão do Rails 3.2.1 no lugar das versões anteriores.
IV – O que precisa ser feito antes
- Este post é continuação do trabalho que fizemos em: Aplicação “mestre detalhe” em Rails 3.2.1
V – Sequência de passos para utilização
Passo 01 – Entre na aplicação que criamos anteriormente
$ cd service_desk
Passo 02 – Gemfile: adicione as gems necessárias
- Ajuste seu arquivo Gemfile para que fique assim:
gem 'devise', '2.0.0'
Passo 03 – Execute o bundle
$ bundle install
Passo 04 – Crie uma nova página inicial para este app
$ rails g controller Pages index $ rm public/index.html
Passo 05 – Acrescente a autenticação pelo Devise
$ rails g devise:install $ rails g devise user
- Estes comandos vão gerar os seguintes arquivos:
- config/initializers/devise.rb
- config/locales/devise.en.yml
- db/migrate/………….._devise_create_users.rb
- app/models/user.rb
- e dentro do arquivo “route”: devise_for :users
- Ajuste o arquivo app/mode/user.rb para que fique da seguinte maneira:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:token_authenticatable, :confirmable, :lockable, :timeoutable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :confirmed_at
end
- Copie e cole a migration gerada para User. Está em db/migrate/……._devise_create_users.rb:
class DeviseCreateUsers < ActiveRecord::Migration
def change create_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Encryptable
t.string :password_salt
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
t.string :unlock_token # Only if unlock strategy is :email or :both
t.datetime :locked_at
## Token authenticatable
t.string :authentication_token
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :confirmation_token, :unique => true
add_index :users, :unlock_token, :unique => true
add_index :users, :authentication_token, :unique => true
end
- O comando abaixo irá executar a migração de dados (migration) e criar a tabela de usuários:
$ bundle exec rake db:migrate
- Repare que na resposta do comando de migração de dados, foi criada automaticamente uma chave única (:unique=>true) para evitar a repetição do email do usuário.
== DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
-> 0.0469s
-- add_index(:users, :email, {:unique=>true})
-> 0.0012s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0011s
== DeviseCreateUsers: migrated (0.0593s) =====================================
- Agora crie uma verificação para que a página inicial do app, nos direcione para a página de login se o usuário não estiver logado.
- No arquivo app/controllers/pages_controller.rb, inclua a linha “before_filter :authenticate_user!”
class PagesController < ApplicationController before_filter :authenticate_user! def index end end
- No arquivo config/environments/development.rb, acrecente as seguintes linhas
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => '587',
:authentication => :plain,
:domain => 'gmail.com',
:user_name => 'joao_da_silva',
:password => '123456'
}
Passo 06 – Ajuste o layout
- Certifique-se que seu arquivo app/views/layouts/application.html.rb, esteja igual ao seguinte
<!DOCTYPE html>
<html>
<head>
<title>Service Desk</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<header>
<h1>Service Desk | Tickets Controller</h1>
</header>
<nav>
<% if user_signed_in? %>
Signed in as <%= current_user.email %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
<% else %>
<%= link_to "Sign up", new_user_registration_path %>
<%= link_to "Sign in", new_user_session_path %>
<% end %>
</nav>
<section id="main">
<div class="flash">
<% flash.each do |type, message| -%>
<div class="message <%= type %>">
<p><%= message %></p>
</div>
<% end -%>
</div>
<%= yield %>
</section>
<footer>
<sub>Service Desk | Ticket Controller Web Application</sub>
</footer>
</body>
</html>
Passo 07 – Ajuste a página principal
- Certifique-se que seu arquivo app/views/pages/index.html.rb, esteja igual ao seguinte
<h1>Home</h1> <%= link_to 'Tickets', tickets_path %>
Passo 08 – Adicione um desvio da página dos tickets para a página principal e ajuste as rotas.
- Certifique-se que seu arquivo app/views/tickets/index.html.rb, as duas últimas linhas sejam as seguintes
<%= link_to 'New Ticket', new_ticket_path %> | <%= link_to 'Home', root_path %>
- No arquivo config/routes.rb, garanta que suas rotas estejam como abaixo
resources :tickets devise_for :users root :to => "pages#index"
Passo 09 – Execute a aplicação localmente
- Execute o servidor e carregue o browser e na linha de endereços digite http://localhost:3000
$ rails server http://localhost:3000
VI – Final Feliz
Pronto!
Fizemos o básico para implementar uma autenticação simples num app web com a gem Devise usando Rails versão 3.2.1.
VII – Referências
(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
(3) Aplicação “mestre detalhe” em Rails 3.2.1
Perfeito, parabéns pelo tutorial, me ajudou bastante.
Publicado por valmir | 10/10/2012, 3:57 PMParabéns mais uma vez!
Tutorial simples e direto!
Aprendizado garantido!
Publicado por Duany Dreyton | 15/02/2013, 10:25 PM