Autenticação no Ruby on Rails com Devise
7 de Agosto de 2010, 0:00 - sem comentários ainda(Escrevi também este post em meu blog pessoal aqui)
Resolvi utilizar o Devise para autenticação de usuários no rails. Existem outras alternativas como Authologic, Clearance, etc. Não sei responder qual destas é a melhor ou mais completa. Contudo, após uma pesquisa em fóruns e na comunidade ativa do rails, percebi que muitos adotam o Devise para autenticação e o CanCan para autorização (falarei mais adiante sobre ele) em projetos que necessitam destes recursos. Logo, cabe a você, desenvolvedor, escolher os recursos que mais lhe agradem e que resolvam as suas necessidades e problemas.
Um bom espaço para conhecer o Devise é no blog da empresa que desenvolveu a gem. Tanto no blog da PlataformaTec quanto no github do projeto, existem diversos documentos que fornecem uma excelente documentação para quem quer utilizar o Devise.
Neste primeiro post, vou mostrar procedimentos básicos, mas suficientes para integrar e configurar o Devise com seu projeto.
Condições Iniciais
Primeiramente, deixo aqui a configuração do ambiente que utilizei para este post:
-
Ubuntu 10.04
-
Ruby 1.8.7 MRI
-
Rubygems 1.3.7
-
Rails 2.3.8
Instalando a GEM
Para minha configuração, segundo a documentação do Devise até a data deste post, a versão da gem que preciso instalar é a 1.0.8. Se você já está utilizando Rails 3, consulte a página do Devise para saber qual a melhor versão indicada.
$ sudo gem install devise -v 1.0.8
Este comando, instalará o devise e o warden (necessário para o correto funcionamento).
Você pode verificar se as gems foram instaladas através de:
$ gem list
Configurando
Precisamos informar ao rails do nosso projeto que este dependerá da gem Devise. No arquivo enviroment.rb adicionamos a seguinte linha:
A informação da versão é opcional, porém por questões de compatibilidade com o projeto, achei conveniente informar. Se você desejar vendorizar a gem para a sua aplicação (importar para /vendor/gems) execute:
Isto importará a gem Devise, ou ainda
que vendorizará as gems necessárias e todas as suas dependências (neste caso Devise + warden). Depois rodamos o seguinte comando rake:
Utilizando o Devise
Vamos criar uma aplicação em que existirá uma seção Eventos onde somente usuários cadastrados no site podem acessar a página. Utilizando o scaffold para agilizar esta parte:
$ script/generate scaffold Event name:string info:text
Feito isto, iniciamos o uso do Devise, onde precisamos rodar primeiramente a instalação do devise em nossa aplicação:
$ script/generate devise_install
Assim que voce rodar o comando acima, 3 passos da configuração deverão ser feitas manualmente:
1. Adicionar em config/enviroments/development.rb a seguinte linha:
(caso o endereço do host de desenvolvimento seja este)
2. Verificar se no arquivo de rotas (config/routes.rb) existe a definição de uma url root como:
3. Verificar se existe o arquivo de layout padrão (views/layouts) e a chamada de mensagens flash
Agora, podemos criar nosso model User com a autenticação:
$ script/generate devise User
Caso o model User já exista não tem problema, pois o Devise apenas adicionará todos os recursos necessários para a autenticação.
Repare agora que alguns arquivos foram criados como a migration para criação da tabela de usuários no banco de dados assim como o model user.rb. Vale a pena conferir a estrutura e o conteúdo destes arquivos para entender quais campos são criados e habilitar os recursos necessários para seu projeto.
Verifique também em seu arquivo config/routes.rb se foi adicionado a seguinte linha:
Feito isto, atualizamos nosso banco de dados com:
$ rake db:migrate
Observe que a autenticação já funciona! No nosso caso, possuímos os seguintes endereços:
-
localhost:3000/users_sign_in : fazer login (iniciar sessão)
-
localhos:3000/users_sign_out :fazer logout (destruir sessão)
-
localhost:3000/users_sign_up : cadastrar novo usuário
No controller de Eventos, basta adicionar
que habilitará a necessidade da autenticação de um usuário para todas as actions do Evento.
Conclusão
Em outros posts, falarei mais sobre algumas configurações que o Devise proporciona. Mas nada impede de olhar a documentação dele que é muito fácil e completa! Recomendo também fortemente assistir os episódios do RailsCasts sobre o Devise.
Valeu!