Possible Duplicate:
Can't convert String into integer in ruby/ruby-on-rails用户身份验证试图字符串转换为整数
我正在通过教程林达学习轨和我遇到的一个问题。我已经构建了一个AccessController以与我拥有的AdminUser模型一起工作。我正在使用字符串/时间盐组合并将其保存到Db,然后尝试使用登录表单进行身份验证。下面是AccessController的
一些代码def attempt_login
authorized_user = AdminUser.authenticate(params[:username], params[:password])
#authorized_user = nil
if authorized_user
flash[:notice] = "You are logged in now"
redirect_to(:action => 'menu')
else
flash[:notice] = "invalid username/password combo"
redirect_to(:action => 'login')
end
末
然后一些从我的模型,我定义的身份验证方法:
def self.authenticate(username="", password="")
user = AdminUser.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
def password_match?(password="")
hashed_password == AdminUser.hash_with_salt(password, salt)
end
所有hash_with_salt方法确实是以盐从数据库中进行该用户并确保输入的密码被盐分加密/加密。这里是我不断得到的错误:
TypeError in AccessController#attempt_login
can't convert String into Integer
Rails.root: /Users/UNAME/Sites/simple_cms
Application Trace | Framework Trace | Full Trace
activesupport (3.1.3) lib/active_support/descendants_tracker.rb:22:in `delete'
activesupport (3.1.3) lib/active_support/descendants_tracker.rb:22:in `block in clear'
activesupport (3.1.3) lib/active_support/descendants_tracker.rb:20:in `each'
activesupport (3.1.3) lib/active_support/descendants_tracker.rb:20:in `clear'
railties (3.1.3) lib/rails/application/bootstrap.rb:56:in `block (2 levels) in <module:Bootstrap>'
activesupport (3.1.3) lib/active_support/callbacks.rb:395:in `_run_cleanup_callbacks'
activesupport (3.1.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.1.3) lib/action_dispatch/middleware/reloader.rb:72:in `rescue in call'
actionpack (3.1.3) lib/action_dispatch/middleware/reloader.rb:67:in `call'
rack (1.3.6) lib/rack/sendfile.rb:101:in `call'
actionpack (3.1.3) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.1.3) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
railties (3.1.3) lib/rails/rack/logger.rb:13:in `call'
rack (1.3.6) lib/rack/methodoverride.rb:24:in `call'
rack (1.3.6) lib/rack/runtime.rb:17:in `call'
activesupport (3.1.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.3.6) lib/rack/lock.rb:15:in `call'
actionpack (3.1.3) lib/action_dispatch/middleware/static.rb:53:in `call'
railties (3.1.3) lib/rails/engine.rb:456:in `call'
rack (1.3.6) lib/rack/content_length.rb:14:in `call'
railties (3.1.3) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.3.6) lib/rack/handler/webrick.rb:59:in `service'
/Users/UNAME/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/Users/UNAME/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/Users/UNAME/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
任何帮助将不胜感激。我确定我正在做与教程完全一样的东西,但是由于Ruby/Rails版本的不同,可能会有错误?在这方面搜索了几个小时,其中大部分讨论inject()方法的结果都没有帮助。再次感谢!
这个答案解决了我非常相同的情况。原因是'''User.hash''覆盖'''Object.hash''' – masterweily 2013-03-07 09:23:07