繁体   English   中英

设计.skip_confirmation! 没有保存

[英]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_pa​​ssword。 例如,当我在控制台中找到一个用户时,该用户有一个cryptomed_pa​​ssword,但是没有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM