从Authlogic迁移到Devise时出现问题

时间:2010-12-14 13:13:40

标签: ruby-on-rails authlogic devise

我提到了Migrating from Authlogic to Devise 并按照它来获取设备所需的数据库结构。 但是我在sign_in页面上收到此错误

wrong number of arguments (2 for 1)

这是我的要求:

{"commit"=>"Sign in","authenticity_token"=>"oWXrE+EdhO4ScuaBzPBqCnpYsal1QcDC483ygVSs0fw=","user"=>{"password"=>"password", "email"=>"email@email.com"}}

我正在使用Rails 2.3.8,因此使用Devise v 1.0。

这是我的会话/新视图:

<% form_for resource_name, resource, :url => session_path(resource_name) do |f| -%>
  <p><%= f.label :email %></p>
  <p><%= f.text_field :email %></p>
  <p><%= f.label :password %></p>
  <p><%= f.password_field :password %></p>

  <p><%= f.submit "Sign in" %></p>
<% end -%>

有什么想法让这个工作?谢谢 !

修改

这是堆栈跟踪:

ArgumentError (wrong number of arguments (2 for 1)):
devise (1.0.8) lib/devise/models/database_authenticatable.rb:139:in `find_for_authentication'
devise (1.0.8) lib/devise/models/database_authenticatable.rb:117:in `authenticate'
devise (1.0.8) lib/devise/strategies/database_authenticatable.rb:16:in `authenticate!'
warden (1.0.3) lib/warden/strategies/base.rb:53:in `_run!'
warden (1.0.3) lib/warden/proxy.rb:303:in `_run_strategies_for'
warden (1.0.3) lib/warden/proxy.rb:298:in `each'
warden (1.0.3) lib/warden/proxy.rb:298:in `_run_strategies_for'
warden (1.0.3) lib/warden/proxy.rb:271:in `_perform_authentication'
warden (1.0.3) lib/warden/proxy.rb:90:in `authenticate'
devise (1.0.8) lib/devise/controllers/helpers.rb:36:in `authenticate'
devise (1.0.8) app/controllers/sessions_controller.rb:19:in `create'
warden (1.0.3) lib/warden/manager.rb:35:in `call'
warden (1.0.3) lib/warden/manager.rb:34:in `catch'
warden (1.0.3) lib/warden/manager.rb:34:in `call'

与守望者依赖有什么关系?

2 个答案:

答案 0 :(得分:1)

我有同样的问题,使用warden 0.10.7并设计1.0.8 我在控制台中尝试了User.find并且没问题。

要修复它,我删除了用户模型上的类方法authenticate

#def self.authenticate(login, pass)
#  find(:first, :conditions => ["login = ? AND password = ?", login, sha1(pass)])
#end

答案 1 :(得分:0)

错误似乎发生在User.find电话中,这很奇怪。你有什么可能覆盖默认的find方法吗?

在控制台中尝试此操作,看看是否收到错误。

User.find(:first, :conditions=>{:email=>'email@email.com'})