[英]Devise .skip_confirmation! is not saving
我向(Devise)用户控制器添加了一个自定义方法:
def confirm
@user = User.find(params[:id])
@user.skip_confirmation!
respond_to
if @user.save
//display success message
else
// display error message
end
end
end
当我尝试通过该方法确认用户时,保存失败,并且@ user.errors中出现两个错误:password和password_confirm
即使在Rails控制台中,如果我尝试
@user.skip_confirmation!
@save
我回滚,保存失败。
任何想法,将不胜感激..
附加信息
造成此问题的原因是
validates_presence_of :password, :password_confirmation
在我的用户模型中。 即使用户在注册时输入了密码和密码确认,这些密码和哈希密码也会被散列在一起以生成crypted_password。 例如,当我在控制台中找到一个用户时,该用户有一个cryptomed_password,但是没有password或password_confirmation。
我已经试过了
validates_presence_of :password, :password_confirmation, :on => :create
但是,这不会强制用户在“更改密码”屏幕上输入密码和确认。
关于如何解决这个问题的任何想法?
我认为您误会了skip_confirmation!
做。
Devise的confirmable
模块将向新用户发送一封电子邮件,其中包含指向您应用程序的链接。 直到他们点击该链接,他们将是“未经证实”,并无法登录。什么skip_confirmation!
这样做是跳过该工作流程-用户将立即得到确认,并且无需先通过电子邮件确认流程即可登录。
由于用户模型上的验证,您遇到了错误。 特别是,您要保存的用户似乎没有现有密码,因此需要password
和匹配的password_confirmation
属性。
我怀疑,无论您的目标是什么,都有更好的方法来实现。 正常的确认工作流程为什么还不够? 这个额外的控制器动作想完成什么?
我认为skip_confirmation!
真正做到了节省。
您想要检查的可能if @user.persisted?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.