devise_invitable: подтвердить после приглашения - PullRequest
4 голосов
/ 19 мая 2011

Я отменяю Разработка Подтверждение! способ отправить приветственное сообщение моим пользователям:

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 (или как он там называется) таким же образом?

Я хочу, чтобы приглашенные пользователи оставались неподтвержденными, а затем подтверждались при принятии приглашения.

Спасибо, любая помощь очень ценится!

Оригинальный источник

UPDATE

Просмотр devise_invitable модели Я нашел два метода, которые могут вызывать это неправильное поведение:

  # 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

Ответы [ 2 ]

8 голосов
/ 27 мая 2011
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
4 голосов
/ 18 января 2015

Я попытался ответить на вопрос Бенора, и сначала он, похоже, сработал, но когда вы, пользователь, принимаете приглашение и заполняете форму как недействительную, он фактически переопределяет токен, который делает приглашение недействительным.доступно для этого:

class User < ActiveRecord::Base

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

  after_invitation_accepted :send_welcome_email


  def send_welcome_email
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...