Devise:覆盖确认,这样用户就可以选择自己的密码作为确认激活的一部分



我正在绑定以获得可确认的电子邮件来激活帐户,电子邮件被发送,当我到达链接以确认帐户时,我输入密码,密码被加密并重定向到root。但我收到一条通知,上面写着"你需要先激活你的账户……"或诸如此类的话。

我试图做的是让一个管理员用户通过添加电子邮件地址来创建用户,然后用户收到一封电子邮件来激活那里的帐户并输入密码,为此我遵循的指示

用户模型

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:token_authenticatable, :confirmable, :validatable

确认控制器

控制器的其余部分与Devise Wiki 上的相同

def update
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
@confirmable.attempt_set_password(params[:user])
if @confirmable.valid?
do_confirm
else
do_show
@confirmable.errors.clear #so that we wont render :new
end
else
self.class.add_error_on(self, :email, :password_allready_set)
end
end
if !@confirmable.errors.empty?
render 'devise/confirmations/new' #Change this if you don't have the views on default path
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_confirm
@confirmable.confirm!
set_flash_message :notice, :confirmed
sign_in(:user, @confirmable)
redirect_to(root_path)
end

还有用户:confirmed_at列没有得到更新,我也无法在控制台中更新它。

真正的问题是当用户按照电子邮件链接输入密码,但记录会更新密码设置。。

如果我尝试登录,我会得到以下信息:

User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 ORDER BY "users"."id" ASC LIMIT 1
(0.1ms)  begin transaction
(0.1ms)  commit transaction
Completed 401 Unauthorized in 3ms

但我认为这是因为用户记录没有得到确认。

你知道吗。。。?

谢谢

好的,所以问题是,出于某种原因,我在用户模型中添加了attr_accessor :confirmed_at,它覆盖了设备的更新:confirmed_at。

最新更新