2011-07-06 36 views
0

我在使用Devise 1.0.11和Rails 2.3.8。我有一個設置,我想通過一個控制器動作自動登錄用戶看起來像這樣用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 

但是,當我想這個我的本地雜種的服務器上,我得到一個錯誤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/[email protected]/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#新登錄表單訪問時,工作得很好。

這可能是一個錯誤,或者你有任何其他的想法?

回答

0

簡單的解決方案。如果你有同樣的問題,你的private_user可能是零。

private_user.nil? => true 

我的測試數據包括該標識符的用戶,而不是開發數據庫。我已經提出要提交一個有意義的錯誤信息的補丁,因爲這個補丁很容易讓人誤解。