ruby-on-rails 如何跳过需要确认电子邮件地址更新与device?

6rvt4ljy  于 2022-12-24  发布在  Ruby
关注(0)|答案(5)|浏览(178)

我将railsdevise一起使用。
通常我希望用户确认他们的电子邮件地址,但有时我需要代表现有用户手动更改电子邮件,我想跳过发送确认电子邮件。
当 * 创建 * 新用户时,我可以跳过确认电子邮件:

user.skip_confirmation!

......但这似乎不适用于已经确认的现有用户--只要email属性没有更新,并且devise仍然要求用户确认新邮件并发送确认邮件:

@user = User.find_by_email('bob@site.example')
@user.email = 'dead@site.example'
@user.skip_confirmation!
@user.save!
7uzetpgm

7uzetpgm1#

您要使用的方法是skip_reconfirmation!(注意再确认中的're')。

@user = User.find_by_email('bob@site.example')
@user.email = 'dead@site.example'
@user.skip_email_changed_notification!
@user.save!
pgvzfuti

pgvzfuti2#

试着将Devise.reconfirmableUser.reconfirmable(或者任何你的模型)设置为false,你可以在config/initializers/devise.rb的下面一行设置它:

# If true, requires any email changes to be confirmed (exctly the same way as
# initial account confirmation) to be applied. Requires additional unconfirmed_email
# db field (see migrations). Until confirmed new email is stored in
# unconfirmed email column, and copied to email column on successful confirmation.
config.reconfirmable = true

您还可以使用Active Record的update_column方法,该方法在不运行回调或验证的情况下保存字段。

7gcisfzg

7gcisfzg3#

您可以在您的型号# models/users.rb中使用此类代码。这将禁用更新时的电子邮件重新确认:

def postpone_email_change?
  false 
end

或在控制器中

def update
  user.email = params[:user][:email]
  user.skip_confirmation_notification!

  if user.save
    user.confirm
  end
end
7cwmlq89

7cwmlq894#

如果只想跳过电子邮件通知,请执行以下操作:

@user.skip_confirmation_notification!
@user.save
eqqqjvef

eqqqjvef5#

更新电子邮件时,请跳过_重新确认!
跳过_重新确认!

@user = User.find_by_email('bob@site.example')
@user.email = 'dead@site.example'
@user.skip_reconfirmation!
@user.save!

相关问题