加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – devise_invitable:邀请后确认

发布时间:2020-12-17 04:03:58 所属栏目:百科 来源:网络整理
导读:我重写了设计的确认!向我的用户发送欢迎消息的方法: class User ActiveRecord::Base devise :invitable,:database_authenticatable,:registerable,:recoverable,:rememberable,:confirmable,:validatable,:encryptable # ... # Devise confirm! method ove
我重写了设计的确认!向我的用户发送欢迎消息的方法:

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

UPDATE

纵观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,: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读