Dica rápida: problema com authlogic + rails 3

Mais uma da série de dicas rápidas, agora referente à um bug com o authlogic e rails 3.

Ao seguir o railscast do Ryan Bates sobre o Authlogic, porém utilizando o rails 3, ao tentar executar o login você irá se deparar com o seguinte erro:

undefined method `to_key' for #

Este erro quer dizer que o UserSession.new está sendo chamado sem passar username e password para ele, isso ocorre porque o esquema de rotas no rails 3 é diferente, causando assim dois problemas:

  1. Primeiro, Authlogic não consegue criar um hash com seu username/password e armazenar em :user_session, logo, params[…] não vai funcionar.
  2. Segundo, Authlogic não sabe qual método REST utilizar para a rotina de autenticação, logo vai falhar ao tentar executar o método create.

A solução que realmente funcionou para mim foi sobrescrever o método to_key no model UserSession(também devemos sobrescrever o persisted?) como a seguir:

def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end

def persisted?
false
end

Utilizei como referência para este post, o seguinte link: Authlogic and Rails 3 solution vale a pena dar uma conferida, lá o autor detalhou mais o erro e também postou outra possível solução(que não rolou aqui para mim).

Abraços e até a próxima !