【问题标题】:Devise skip confirmation notification before save保存前设计跳过确认通知
【发布时间】:2015-08-09 03:28:31
【问题描述】:

在 Rails 4.2.0 中,我使用 Devise gem 进行身份验证 - devise 3.4.1

创建用户后会立即发送确认电子邮件。我们需要跳过此确认电子邮件并发送带有确认链接的自定义电子邮件。请帮我解决这个问题。

:confirmable 用于 User 模型中。

【问题讨论】:

  • 您要“跳过”确认邮件还是要“更改”确认邮件?

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

你可以试试这个

@user.skip_confirmation!
@user.save

在保存用户记录之前,请致电skip_confirmation!

要跳过确认通知,您可以使用skip_confirmation_notification!

@user.skip_confirmation_notification!
@user.save

希望这会有所帮助!


另外

如果您希望在不创建变量的情况下跳过同一行的确认,并且您不需要确认该特定用户,例如在seeds.rb

User.create(email: "#{role_name}@example.com",
            password: 'password',
            password_confirmation: 'password',
            confirmed_at: Time.now.utc, # skip confirmation)

如果你只是想覆盖默认的电子邮件模板,那么你可以运行

rails generate devise:views -v registrations confirmations

它将生成用于确认的默认视图,然后您可以根据需要覆盖它。

【讨论】:

  • 如果我添加skip_confirmation! 那么它将确认用户帐户。但它不应该这样工作,用户应该通过电子邮件(自定义电子邮件)确认他们的帐户
  • 当然你可以在跳过设计确认邮件后发送自定义邮件
  • 一旦用户帐户被确认,那么发送带有确认链接的自定义邮件有什么用?
  • 要跳过确认电子邮件,您可以使用 .skip_confirmation_notification! 代替
  • 如果我使用此电子邮件问题将得到解决。但是会出现另一个问题,如果用户尝试重新发送确认邮件,在该邮件确认链接中会抛出一个验证,如“确认令牌无效”
【解决方案2】:

你可以这样做:

这可以是UserController

@user = User.new(email: "#{role_name}@example.com",
        password: 'password',
        password_confirmation: 'password',
        confirmed_at: Time.now.utc) # skip confirmation
@user.skip_confirmation!
@user.confirm
if @user.save
  MyMailer.confirmation(@user)
else
  # your implementation
end

请参阅文档https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer

【讨论】:

    【解决方案3】:

    您可以自定义设计的确认电子邮件,而不是禁用设计的内置确认电子邮件并发送您的自定义电子邮件。 您可以使用

    生成设计视图文件
    rails generate devise:views
    

    然后自定义确认邮件。

    【讨论】:

    • 这是正确的答案。只需覆盖视图模板!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多