Olá pessoal, acabei de portar um projeto de rails 2 para 3 e durante o processo resolvi alterar a autentificação do site que usava authlogic para o tão falado Devise (e gostei muito).
Este post é para mostrar como fazer essa troca de tecnologia sem perder as senhas de seus usuários. Caso precise de uma introdução ao Devise recomendo dar uma olhada no material do railscast.
Editando o model User
Antes de tudo, voce precisa configurar o seu model User removendo todas as referências ao authlogic e adicionar as configurações do Devise, no meu caso ficou assim:
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :token_authenticatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes, :curriculums_attributes
has_one :profile, :dependent => :destroy
has_many :curriculums, :dependent => :destroy
accepts_nested_attributes_for :profile
accepts_nested_attributes_for :curriculums
end
Note que caso você use “accepts_nested_attributes_for :model” terá que adicionar :model_attributes em attr_accessible
Criando a migração
O Devise prove uma forma simples de criar a tabela de usuários, mas no nosso caso vamos precisar alterar e criar novas colunas “na mão”:
1 2 3 # alterando a culuna do authlogic para a nomenclatura do devise 4 rename_column :users, :crypted_password, :encrypted_password 5
6 # necessário se você utilizar :confirmable 7 add_column :users, :confirmation_token, :string 8 add_column :users, :confirmed_at, :timestamp 9 add_column :users, :confirmation_sent_at, :timestamp 10 execute "UPDATE users SET confirmed_at = created_at, confirmation_sent_at = created_at" 11
12 # necessário se você utilizar recoverable 13 add_column :users, :reset_password_token, :string 14
15 # necessário se você utilizar :rememberable
16 add_column :users, :remember_token, :string 17 add_column :users, :remember_created_at, :timestamp 18 19 # alterando as culunas do authlogic para a nomenclatura do devise 20 rename_column :users, :login_count, :sign_in_count 21 rename_column :users, :current_login_at, :current_sign_in_at 22 rename_column :users, :last_login_at, :last_sign_in_at 23 rename_column :users, :current_login_ip, :current_sign_in_ip 24 rename_column :users, :last_login_ip, :last_sign_in_ip
25 rename_column :users, :failed_login_count, :failed_attempts
26
27 # removendo colunas do authlogic que não são utilizadas pelo devise 28 remove_column :users, :persistence_token
29 remove_column :users, :perishable_token 30 remove_column :users, :single_access_token 31
32 # devise faz login pelo email por padrão (é possivel criar outras formas) 33 add_column :users, :email, :string 34
35 add_index :users, :email, :unique => true 36 add_index :users, :reset_password_token, :unique => true 37 add_index :users, :confirmation_token, :unique => true 38 end 39 40 41 remove_column :users, :email 42 add_column :users, :single_access_token, :string 43 add_column :users, :perishable_token, :string 44 add_column :users, :persistence_token, :string 45 rename_column :users, :failed_attempts, :failed_login_count 46 rename_column :users, :last_sign_in_ip, :last_login_ip 47 rename_column :users, :current_sign_in_ip, :current_login_ip 48 rename_column :users, :last_sign_in_at, :last_login_at 49 rename_column :users, :current_sign_in_at, :current_login_at 50 rename_column :users, :sign_in_count, :login_count 51 remove_column :users, :remember_created_at 52 remove_column :users, :remember_token 53 remove_column :users, :reset_password_token 54 remove_column :users, :confirmation_sent_at 55 remove_column :users, :confirmed_at 56 remove_column :users, :confirmation_token 57
58 rename_column :users, :encrypted_password, :crypted_password 59 end 60 end
Configurando o o arquivo config/initializers/devise.rb
O Devise utiliza, por default, gbiz para critografar as senhas, mas provê suporte a outros algoritmos (incluindo o utilizado pelo authlogic). Abra o arquivo e configure como abaixo:
config.stretches = 20
config.encryptor = :authlogic_sha512
Limpando a casa
Você deve remover o model UserSession e todas as referencias a ele (caso existam).
Lembre-se que os helpers para controlar o usuário logado são user_signed_in?, current_user e user_session. Então atualize suas views!
Com o devise não é necessário ter controllers para gerenciar o usuário, logo você pode remover também esses controllers que utilizava com o Authlogic.
