【问题标题】:Manually unconfirm a user in devise, rails在设计、rails 中手动取消确认用户
【发布时间】:2013-07-31 21:11:04
【问题描述】:

我正在尝试在我的应用程序中执行某些操作,如果用户在 90 天内未登录,他们的帐户将被设置为未确认,并且他们将收到电子邮件以重新确认他们的电子邮件地址。

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

Devise::Mailer.confirmation_instructions(@user).deliver

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

 t.string   "unconfirmed_email"
 t.string   "confirmation_token"
 t.datetime "confirmed_at"
 t.datetime "confirmation_sent_at"

是否将它们全部设置为 nil,然后将未确认的电子邮件返回到常规电子邮件,这是否可行?

【问题讨论】:

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


    【解决方案1】:

    根据设计代码,清除 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
    

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 2011-11-18
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多