#configuração, #desenvolvimento

Utilizando Devise em um projeto RoR


Olá pessoal.
Continuando meu propósito de criar um projeto real com RoR descobri um projeto no Github, denominado Devise que é uma solução para autenticação nos projetos RoR.
Além da página de documentação do Devise também utilizei o Railscast – Introducing Devise para enfim adicioná-lo no projeto.

Abra o terminal e instale o Devise:

$ gem install devise

Acesse a pasta do seu projeto Rails, procure pelo arquivo Gemfile e acrescente a linha:

gem 'devise'

Volte para o terminal e atualize as gems:

$ bundle install

Crie um scaffold simples:

$ rails generate scaffold project name:string

Execute as migrações:

$ rake db:migrate

Gere o devise para o projeto:

$ rails generate devise:install

Adicione a configuração default de e-mail no arquivo pastadoprojeto/config/environments/development.rb:

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

Gere o devise para o model User:

$ rails generate devise User

Altere a classe do model User (pastadoprojeto/app/models/user.rb):

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation
end

Altere a migração DeviseCreateUsers (pastadoprojeto/db/migrate/…_devise_create_users.rb):

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable
      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

Execute as migrações:

$ rake db:migrate

Remova o arquivo index.html do diretório pastadoprojeto/public.

Adicione a rota no arquivo pastadoprojeto/config/routes.rb:

Tutorialdevise::Application.routes.draw do
  devise_for :users

  resources :projects
# Rota que redireciona para a página principal gerada pelo scaffold.
  root :to => "projects#index"

end

Execute as rotas:

$ rake routes

Por fim adicione a div user_nav no arquivo pastadoprojeto/app/views/layout/application.html.erb, que exibirá os links Sign out, Sign up e Sign in no topo de todas as páginas:

<!DOCTYPE html>
<html>
<head>
  <title>Tutorialdevise</title>
  <%= stylesheet_link_tag :all %>
  <%= javascript_include_tag :defaults %>
  <%= csrf_meta_tag %>
</head>
<body>
	<div id="user_nav">
		<% if user_signed_in? %>
			Signed in as <%= current_user.email %>. Not you?
			<%= link_to "Sign out", destroy_user_session_path %>
		<% else %>
			<%= link_to "Sign up", new_user_registration_path %> or <%= link_to "Sign in", new_user_session_path %>
		<% end %>
	</div>
<%= yield %>
</body>
</html>

Para consegui testar basta iniciar o servidor:

$ rails s

Agora abra o navegador, acesse http://localhost:3000/users/sign_up cadastre-se e depois acesse http://localhost:3000/users/sign_in para logar.
Nos dois casos as páginas serão redirecionadas para a página principal do scaffold, mas não se preocupe, isto pode ser alterado no arquivo de rotas.
Com isso já dá pra começar a brincar com o Devise.
Até breve 😉

Anúncios
Padrão

5 comentários sobre “Utilizando Devise em um projeto RoR

  1. Fabricio disse:

    aqui funcionou agora … o arquivo de rota tinha gerado codigo incompleto (nao me pergunta como).
    Gerei o projeto de novo e agora funcionou certinho … agora é so mecher no layout do html e deixar tudo certinho …

    Obrigado … tutorial otimo =)

  2. Fabricio disse:

    comigo nao funcionou a parte que eu tinha que adicionar a linha:
    “config.action_mailer.default_url_options = { :host => ‘localhost:3000′ }

    Se eu adiciono quando eu executo: “rails generate devise User” da o erro:
    “undefined local variable or method `config’ for main:Object (NameError)”
    Se eu rodo o comando sem adicionar essa linha ele executa normal .. para que serve esse registro??

    • Olá Fabricio.

      Até onde sei essa linha configura o seu domínio de e-mail.

      config.action_mailer.default_url_options = { :host => ‘seudominio.com.br’ }

      Como não implementamos o envio de e-mails no passo-a-passo do post, ela não é necessária. Por isso você conseguiu utilizar sem adicioná-la.

      Entretanto o erro obtido indica que a variável config não foi encontrada. Acredito que está faltando declará-la no arquivo pastadoprojeto/config/environments/development.rb

      Até breve 😉

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s