在设计、导轨中手动取消确认用户

Ell*_*iot 6 ruby ruby-on-rails devise ruby-on-rails-3

我正在尝试在我的应用程序中做一些事情,如果用户在 90 天内没有登录,他们的帐户将被设置为未确认,他们将收到电子邮件以重新确认他们的电子邮件地址。

我知道我可以重新发送电子邮件:

Devise::Mailer.confirmation_instructions(@user).deliver
Run Code Online (Sandbox Code Playgroud)

我在架构中看到这些相关字段 -

 t.string   "unconfirmed_email"
 t.string   "confirmation_token"
 t.datetime "confirmed_at"
 t.datetime "confirmation_sent_at"
Run Code Online (Sandbox Code Playgroud)

是否将它们全部设置为 nil,并将未经确认的电子邮件返回到常规电子邮件使这项工作有效?

ush*_*sha 2

根据设计代码,清除confirmation_token并将unconfirmed_email设置为原始电子邮件应该重新发送确认。由于您有 unconfirmed_email 列,我假设您在设备配置中启用了可重新确认功能。

从下面可确认的模型中可以看到相关代码

  after_update  :send_reconfirmation_instructions,  :if => :reconfirmation_required? 


  def send_reconfirmation_instructions
    @reconfirmation_required = false

    unless @skip_confirmation_notification
      send_confirmation_instructions
    end
  end

 # Send confirmation instructions by email
  def send_confirmation_instructions
    ensure_confirmation_token!

    opts = pending_reconfirmation? ? { :to => unconfirmed_email } : { }
    send_devise_notification(:confirmation_instructions, opts)
  end

 # Generate a confirmation token unless already exists and save the record.
  def ensure_confirmation_token!
    generate_confirmation_token! if should_generate_confirmation_token?
  end 

  def should_generate_confirmation_token?
      confirmation_token.nil? || confirmation_period_expired?
    end
Run Code Online (Sandbox Code Playgroud)