2011-09-18 76 views
7

我有一個自定義SessionsController使用設計,當我瀏覽/ users/sign_in並輸入一些authdata然後提交時,有一些錯誤。設計自定義sign_in錯誤

 
NoMethodError in Users::SessionsController#create 

undefined method `serialize_into_session' for Symbol:Class 
Rails.root: /home/kewang/rails/devisetest 

Application Trace | Framework Trace | Full Trace 
devise (1.4.5) lib/devise/rails/warden_compat.rb:19:in `serialize' 
warden (1.0.5) lib/warden/session_serializer.rb:25:in `store' 
warden (1.0.5) lib/warden/proxy.rb:161:in `set_user' 
devise (1.4.5) lib/devise/controllers/helpers.rb:111:in `sign_in' 
app/controllers/users/sessions_controller.rb:3:in `create' 

應用程序/控制器/用戶/ sessions_controller.rb

class Users::SessionsController < Devise::SessionsController 
    def create 
    sign_in(resource_name, resource) 
    end 
end 

應用程序/傭工/ application_helper.rb

module ApplicationHelper 
    def resource_name 
    :user 
    end 

    def resource 
    @resource ||= User.new 
    end 

    def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
    end 
end 

的config/routes.rb中

devise_for :users, :controllers => { :sessions => "users/sessions" } 

什麼我可不可以做?

我的開發環境是Rails的3.1.0,1.9.2紅寶石

+0

我覺得資源在http://groups.google.com/group/plataformatec-devise/browse_thread/thread/f9718059bc3a05e8中沒有。你爲什麼在控制器中可以訪問輔助方法? – e3matheus

回答

1

設計有一堆的自定義方法,它在它的控制器使用。

你可以嘗試調用超級獲得方法,或

class Users::SessionsController < Devise::SessionsController 
    def create 
    sign_in(resource_name, resource) 
    super 
    end 
end 

但我會建議包括整個設計會話#create方法,然後從該基地不斷變化的東西。 Link here

def create 
    self.resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
end 
0

你想要的是

sign_in:用戶

我認爲,常見的錯誤是創建一個用戶,說有一個工廠,並嘗試

設(:用戶) {create(:user)}

...然後用current_user作爲字符串調用sign_in:

sign_in user

..這會導致可怕的「serialize_in_session」錯誤。