【发布时间】:2014-08-07 06:56:48
【问题描述】:
我正在使用 Rails 4 并设计 3.2。在注册时,激活/确认链接会通过电子邮件发送给新注册的用户。我已经从this article in the Devise wiki 实现了这个。
每当我输入相同的密码时,他们就可以毫无问题地登录,但是当我在第一次尝试时输入密码不匹配错误并在第二次尝试中输入相同的密码时,它就不起作用了。
这是出现的错误
NoMethodError in ConfirmationsController#update
undefined method `add_error_on' for ConfirmationsController:Class
确认控制器
class ConfirmationsController < Devise::ConfirmationsController
skip_before_filter :require_no_authentication
skip_before_filter :authenticate_user!
# PUT /resource/confirmation
def update
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
@confirmable.attempt_set_password(params[:user])
if @confirmable.valid? and @confirmable.password_match?
do_confirm
else
do_show
@confirmable.errors.clear #so that we wont render :new
end
else
self.class.add_error_on(self, :email, :password_already_set)
end
end
if !@confirmable.errors.empty?
render 'devise/confirmations/new'
end
end
# GET /resource/confirmation?confirmation_token=abcdef
def show
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
do_show
else
do_confirm
end
end
if !@confirmable.errors.empty?
self.resource = @confirmable
render 'devise/confirmations/new'
end
end
protected
def with_unconfirmed_confirmable
original_token = params[:confirmation_token]
confirmation_token = Devise.token_generator.digest(User, :confirmation_token, original_token)
@confirmable = User.find_or_initialize_with_error_by(:confirmation_token, confirmation_token)
if !@confirmable.new_record?
@confirmable.only_if_unconfirmed {yield}
end
end
def do_show
@confirmation_token = params[:confirmation_token]
@requires_password = true
self.resource = @confirmable
render 'devise/confirmations/show'
end
def do_confirm
@confirmable.confirm!
set_flash_message :notice, :confirmed
sign_in_and_redirect(resource_name, @confirmable)
end
end
请帮忙。谢谢。
【问题讨论】:
-
我遇到了同样的错误,有什么更新吗?
标签: ruby-on-rails devise devise-confirmable