2012-11-21 58 views
2

在設計中覆蓋密碼控制器時出現問題。我不想在密碼更改後登錄用戶,所以我想重寫密碼控制器,我嘗試如下,並得到一個錯誤。我無法確定問題所在,請幫助我。以下是passwords_controller.rb在設計中覆蓋密碼控制器不起作用

class PasswordsController < Devise::PasswordsController 
    prepend_before_filter :require_no_authentication 
    # Render the #edit only if coming from a reset password email link 
    append_before_filter :assert_reset_token_passed, :only => :edit 

    def new 
     super 
    end 

    def create 
     super 
    end 

    def edit 
     self.resource = resource_class.new 
     resource.reset_password_token = params[:reset_password_token] 
    end 

    def update 
     self.resource = resource_class.reset_password_by_token(resource_params) 

     if resource.errors.empty? 
      flash_message = resource.active_for_authentication? ? :updated : :updated_not_active 
      set_flash_message(:notice, "New password has been saved") 
      redirect_to new_user_session_path 
      else 
      respond_with resource 
     end 
    end 

    protected 

    # The path used after sending reset password instructions 
    def after_sending_reset_password_instructions_path_for(resource_name) 
     new_session_path(resource_name) 
    end 

    # Check if a reset_password_token is provided in the request 
    def assert_reset_token_passed 
     if params[:reset_password_token].blank? 
      set_flash_message(:error, :no_token) 
      redirect_to new_session_path(resource_name) 
     end 
    end 

    # Check if proper Lockable module methods are present & unlock strategy 
    # allows to unlock resource on password reset 
    def unlockable?(resource) 
     resource.respond_to?(:unlock_access!) && 
     resource.respond_to?(:unlock_strategy_enabled?) && 
     resource.unlock_strategy_enabled?(:email) 
    end 
end 

和我的路線是

devise_for :users, :controllers => { :passwords => 'passwords' } 

和我得到的錯誤是

NameError in PasswordsController#update 
undefined local variable or method `resource_params' for #<PasswordsController:0x000001008231c8> 

回答

0

最後它的工作原理。我正在使用設計版本1.5.3,它不提供resource_params方法,所以我從設計版本1.5.3複製以下,它的工作原理。

self.resource = resource_class.reset_password_by_token(PARAMS [RESOURCE_NAME])

0

你 'resource_params' 是不確定的。可能是你應該得到它作爲參數:

def update 
    self.resource = resource_class.reset_password_by_token(params[:resource_params]) 
    .... 
+0

我已經嘗試了,你說,它顯示了不同的錯誤:「你有一個零對象時,你沒想到吧! 您可能已經預期了Array的一個實例 評估nil時發生錯誤[]「 – logesh