Devise / Devise_invitable:如何跳过待处理的邀请控件

时间:2015-08-24 20:17:55

标签: ruby-on-rails devise devise-invitable

我有一个使用devise和devise_invitable gems的Rails / Mongoid应用程序,其特殊情况是用户has_and_belongs_to_many组。这在应用程序中意味着可以由其他用户邀请用户到一个或多个组。我正在使用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

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我在开启的devise_invitable ticket得到了帮助。

实现我要求的方法是在User模型上覆盖this method。因此,即使他/她有待处理的邀请,允许已确认用户登录的解决方案如下:

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

希望将来帮助其他人。