我正在使用Devise 1.0.11和Rails 2.3.8。我有一个设置,我想通过看起来像这样的控制器动作自动登录用户
def select_private
reset_session
private_user = User.find_by_identifier "PRIVATE"
sign_in :user, private_user
redirect_to a_page_that_needs_authentication_of_a_user_url
end
对此的测试看起来像这样并且运行得很好
test "select the private customer" do
get '/'
assert_response :success
get_via_redirect '/select/private'
assert_response :success
assert_equal path, '/shirt'
end
但是当我在我的本地Mongrel服务器上尝试这个时,我得到一个MethodNotFound错误
undefined method `find' for Symbol:Class
重定向到page_that_needs_authentication_of_a_user之后,带有以下最后几行感兴趣的堆栈跟踪
gems/devise-1.0.11/lib/devise/rails/warden_compat.rb:23:in `deserialize'
gems/ruby-1.8.7-p302@rails2/gems/warden-1.0.3/lib/warden/session_serializer.rb:31:in `fetch'
gems/warden-1.0.3/lib/warden/proxy.rb:182:in `user'
gems/warden-1.0.3/lib/warden/proxy.rb:270:in `_perform_authentication'
gems/warden-1.0.3/lib/warden/proxy.rb:113:in `authenticate!'
gems/devise-1.0.11/lib/devise/controllers/helpers.rb:207:in `authenticate_user!'
呈现的操作调用authenticate_user!作为before_filter,通过正常的Session#new登录表单访问时效果很好。
这可能是一个错误,还是您有其他想法?
答案 0 :(得分:0)
简单的解决方案。如果你有同样的问题,你的private_user可能是零。
private_user.nil? => true
我的测试数据包括该标识符的用户,而不包括开发数据库。我已经提议提交一个包含有意义的错误消息的补丁,因为在我看来,这个错误非常具有误导性。