[英]overriding password controller in devise not working
I have problems when overriding passwords controller in devise. 在设计中重写密码控制器时遇到问题。 I do not want to sign in the user after password is changed so i thought of overriding the password controller and i tried as follows and got an error. 更改密码后,我不想登录用户,所以我想到了重写密码控制器,我尝试了如下操作并出现错误。 I could not identify what the problem is, so please help me. 我无法确定问题出在哪里,所以请帮助我。 The following is the passwords_controller.rb 以下是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
and my routes is 我的路线是
devise_for :users, :controllers => { :passwords => 'passwords' }
and the error i get is 我得到的错误是
NameError in PasswordsController#update
undefined local variable or method `resource_params' for #<PasswordsController:0x000001008231c8>
Your 'resource_params' is undefined. 您的'resource_params'未定义。 May be you should get it as a parameter : 可能是您应该将其作为参数获取:
def update
self.resource = resource_class.reset_password_by_token(params[:resource_params])
....
Finally it works. 终于可以了。 I am using devise version 1.5.3 and it does not provide resource_params method so i copied the following from devise version 1.5.3 and it works. 我使用的是devise版本1.5.3,它不提供resource_params方法,因此我从devise版本1.5.3复制了以下内容,并且可以正常工作。
self.resource = resource_class.reset_password_by_token(params[resource_name]) self.resource = resource_class.reset_password_by_token(params [resource_name])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.