Migrando senhas com Authlogic
by Ricardo Yasuda on March 22, 2010 23:57
Estou no processo de migração de uma aplicação de Rails 1.2.6 (!!) para Rails 2.3.5. Como muita coisa mudou, estou refazendo do zero. Só que um dos problemas é a base legada, com muitos usuários. Na época, os sistemas de autenticação como restful_authentication, Authlogic e Devise nem existiam, então a autenticação foi feita na mão.
O desafio era migrar tudo para Authlogic. Seria difícil, se não fosse uma feature pouco conhecida do Authlogic: transition_from_crypto_providers
Essa configuração faz com que quando um usuário fizer login, o Authlogic compare a senha com a encriptação normal dele, se não funcionar ele tenta as outras que você define assim:
acts_as_authentic do |c| c.transition_from_crypto_providers = [UserPasswordCryptSHA, UserPasswordCryptMD5] end
Neste exemplo, configuramos dois métodos de encriptação legados. Quando o Authlogic validar a senha com um desses métodos, ele automaticamente encripta a senha novamente usando o método novo. Isso acontece também para registros novos. E para configurar um método legado, é só criar um arquivo na lib:
class UserPasswordCryptMD5
def self.encrypt(*tokens)
Digest::MD5.hexdigest(*tokens)
end
def self.matches?(crypted_password, *tokens)
encrypt(*tokens) == crypted_password
end
def self.type
"MD5"
end
end
O Authlogic pede somente dois métodos, encrypt e matches?. Não preciso explicar, né?
Tags: rails, ruby, authlogic, password, encryption
You may also like:
- RailsConf 2011, here I go
- RubyConf Brasil, vá de bike
- 6o Encontro do Guru-SP - Testes
- Rails Summit 2009
- Evento: Ruby e Rails no Mundo Real

