2

User が has_and_belongs_to_many グループを持つ特別なシナリオで、devise および devise_invitable gem を使用する Rails/Mongoid アプリケーションがあります。アプリケーションでこれは、ユーザーが他のユーザーによって 1 つ以上のグループに招待される可能性があることを意味します。新規ユーザーと既存ユーザーの両方の招待を処理するために devise_invitable を使用しています。

私が問題を抱えているシナリオは、既にアカウントを登録して確認済みで、あるグループに既に招待されている可能性があるユーザーが、別のグループに招待された場合です。この場合、システムは通常どおり新しい招待状を送信しますが、招待される新しい招待状を作成するのではなく、既存のユーザーに対して送信します。

ユーザーが招待を確認すると、すべて問題なく動作しますが、私が抱えている問題は、ユーザーが確認しない限り、アラートを受け取るため、ユーザー アカウントに再度ログインできないことです。

You have a pending invitation, accept it to finish creating your account.

だから、すでに確認されているが保留中の招待があるユーザーとしてログインしようとするときに、そのコントロールをスキップするために、どうすればいいのか、Devise/Devise_invitable で何をオーバーライドすればよいのか疑問に思っています。

私のユーザーモデルはこれです:

class User
  include Mongoid::Document
  include Mongoid::Attributes::Dynamic
  include Mongoid::Timestamps
  include Mongoid::Userstamp::User

  devise :invitable, :encryptable, :database_authenticatable, :registerable, :lockable, :recoverable, :confirmable, :rememberable, :trackable, :validatable, :timeoutable

has_and_belongs_to_many :groups

ありがとう!

4

1 に答える 1

1

わかりました、私が開いた devise_invitableチケットで助けを得ました。

私が求めていたものを達成する方法は、 User モデルでこのメソッドをオーバーライドすることです。したがって、確認済みのユーザーが保留中の招待状を持っている場合でもサインインできるようにするソリューションは次のとおりです。

class User
  ...
  def block_from_invitation?
    #If the user has not been confirmed yet, we let the usual controls work
    if confirmed_at.blank?
      return invited_to_sign_up?
    else #if the user was confirmed, we let them in (will decide to accept or decline invitation from the dashboard)
      return false
    end
  end
  ...
end

将来、他の誰かに役立つことを願っています。

于 2015-08-26T12:28:20.777 に答える