【问题标题】:Devise: Is it possible to NOT send a confirmation email in specific cases ? (even when confirmable is active)设计:在特定情况下是否可以不发送确认电子邮件? (即使可确认处于活动状态)
【发布时间】:2011-01-25 06:42:10
【问题描述】:

这是我的情况,我使用设计允许用户在 我的网站并管理他们的身份验证。 在注册过程中,我允许客户更改一些 选项,导致创建一个实际上不同的帐户,但 仍然基于相同的核心用户资源。 我想选择不为某些邮件发送确认电子邮件 这些帐户类型。我不在乎帐户是否没有得到确认 并且用户无法登录,没关系,没有pb。 我该怎么做呢? 谢谢, 亚历克斯

【问题讨论】:

    标签: ruby email devise confirmation


    【解决方案1】:

    实际上,一旦我深入挖掘,这很容易。 只需覆盖用户模型中的一种方法(或您正在使用的任何方法):

        # Callback to overwrite if confirmation is required or not.
        def confirmation_required?
          !confirmed?
        end
    

    把你的条件和工作完成!

    亚历克斯

    【讨论】:

    • 邮件不会在 resend_confirmation 或 send_reconfirmation 中发送,这很有用...
    【解决方案2】:

    如果您只想跳过发送电子邮件但不进行确认,请使用:

    # Skips sending the confirmation/reconfirmation notification email after_create/after_update. Unlike
    # #skip_confirmation!, record still requires confirmation.
    @user.skip_confirmation_notification!
    

    如果您不想在模型中使用回调调用此方法,请覆盖此方法:

    def send_confirmation_notification?
      false
    end
    

    【讨论】:

      【解决方案3】:

      您还可以在创建新用户之前在控制器中添加以下代码行:

      @user.skip_confirmation!
      

      【讨论】:

      • 如果您正在重载create 操作并使用super do |user| 进行自定义,那么跳过已经太晚了,设计已经发送了电子邮件。例如,这应该进入build_resource
      【解决方案4】:

      我不知道 Devise 是否在提交其他答案后添加了这个,但是这个代码就在 confirmable.rb 中:

        # If you don't want confirmation to be sent on create, neither a code
        # to be generated, call skip_confirmation!
        def skip_confirmation!
          self.confirmed_at = Time.now
        end
      

      【讨论】:

      • 注意,在保存用户之前要调用这个,否则会发送Confirmation instructions邮件。
      • 还有一个类似的skip_reconfirmation!方法
      【解决方案5】:

      我可以用这些函数做类似的事情:

      registrations_controller.rb

      def build_resource(*args) 极好的 if session[:omniauth] # TODO -- 如果他们有会话但没有登录怎么办? @user.apply_omniauth(会话[:omniauth]) @user.mark_as_confirmed # 如果他们使用外部身份验证,我们不需要确认帐户 # @user.valid? 结尾 结尾

      然后在我的用户模型中:

      user.rb

      def mark_as_confirmed self.confirmation_token = nil self.confirmed_at = Time.now 结尾

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        相关资源
        最近更新 更多