shadowmaru.org

Vai tomar café

Migrando senhas com Authlogic

by Ricardo Yasuda on March 22, 2010 23:57

Posted in Rails, Ruby

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:

blog comments powered by Disqus
Google Analytics Alternative