ruby-on-rails - devise_invitable : Confirm after Invitation

标签 ruby-on-rails ruby-on-rails-3 devise actionmailer invite

我覆盖 设计 的确认!向我的用户发送欢迎消息的方法:

class User < ActiveRecord::Base

  devise :invitable, :database_authenticatable, :registerable, :recoverable, 
         :rememberable, :confirmable, :validatable, :encryptable

  # ...

  # Devise confirm! method overriden
  def confirm!
    UserMailer.welcome_alert(self).deliver
    super
  end

end

使用 devise_invitable 当用户接受邀请并设置他的密码时, 确认! 方法永远不会被触发,是否可以强制它? devise_invitable 如何确认用户?

或者,也许我可以用同样的方式覆盖 accept_invite(或其调用的任何东西)方法?

我希望受邀用户保持未确认状态,然后在接受邀请时进行确认。

谢谢,非常感谢任何帮助!

Original Source

更新

查看 devise_invitable model 我发现了可能导致这种不当行为的两种方法:
  # Accept an invitation by clearing invitation token and confirming it if model
  # is confirmable
  def accept_invitation!
    if self.invited? && self.valid?
      self.invitation_token = nil
      self.save
    end
  end

  # Reset invitation token and send invitation again
  def invite!
    if new_record? || invited?
      @skip_password = true
      self.skip_confirmation! if self.new_record? && self.respond_to?(:skip_confirmation!)
      generate_invitation_token if self.invitation_token.nil?
      self.invitation_sent_at = Time.now.utc
      if save(:validate => self.class.validate_on_invite)
        self.invited_by.decrement_invitation_limit! if self.invited_by
        !!deliver_invitation unless @skip_invitation
      end
    end
  end

最佳答案

class User < ActiveRecord::Base
  devise :invitable, :database_authenticatable, :registerable, :recoverable, 
         :rememberable, :confirmable, :validatable, :encryptable

  # ...

  # devise confirm! method overriden
  def confirm!
    welcome_message
    super
  end

  # devise_invitable accept_invitation! method overriden
  def accept_invitation!
    self.confirm!
    super
  end

  # devise_invitable invite! method overriden
  def invite!
    super
    self.confirmed_at = nil
    self.save
  end

private

  def welcome_message
    UserMailer.welcome_message(self).deliver
  end

end

关于ruby-on-rails - devise_invitable : Confirm after Invitation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052376/

相关文章:

jquery - 显示自动完成的下拉菜单不起作用

ruby-on-rails - 如何让设备与多个模型或角色一起工作? (最好使用 CanCan 和 rolify)

ruby-on-rails - 设计:用户未登录

ruby-on-rails - Graphql突变错误: "Field ' createUser' is missing required arguments: input"

ruby-on-rails - 测量多线程环境中线程的执行时间

ruby-on-rails - 安装 Rails 3 后如何使用 Rails 2.3 应用程序生成器?

ruby-on-rails - 无法删除有关 case_sensitive 的警告

javascript - 将 Javascript 变量传递给 Rails 路径

sql - 复杂 SQL 查询优化

ruby-on-rails - 如何让 Rails、SSL 和 Apache 发挥良好的作用?