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>
4

2 回答 2

0

您的“resource_params”未定义。也许您应该将其作为参数获取:

def update
    self.resource = resource_class.reset_password_by_token(params[:resource_params])
    ....
于 2012-11-21T07:34:50.457 回答
0

最后它起作用了。我使用的是设计版本 1.5.3,它不提供 resource_params 方法,所以我从设计版本 1.5.3 复制了以下内容,它可以工作。

self.resource = resource_class.reset_password_by_token(params[resource_name])

于 2012-11-22T10:48:40.820 回答