使用devise_invitable将用户添加到Ruby on Rails中的组?

Tim*_*Tim 8 ruby-on-rails registration devise

我的应用程序中有一个"组"资源,用户可以加入(组has_and_belongs_to_many用户,反之亦然).该devise_invitable插件允许我的应用程序的现有用户的电子邮件邀请到另一个poetntial用户在网站上注册,但我需要一些额外的功能:我希望用户能够邀请某人给特定群组,以便尽快当他们在电子邮件中接受该邀请时,他们可以看到加入该组的链接.

有没有人用devise_invitable来做这样的事情?添加此额外功能的最佳方法是什么?我似乎需要在邀请电子邮件中包含某种标识该组的"组令牌",然后将其传回用户点击以接受邀请的URL.

我应该覆盖邀请控制器方法,还是有另一个插件更好地服务于目的?

Mat*_*ani 7

我刚刚实现了一些非常相似的.我曾试图使用devise_invitable,但它的工作量很大.所以我找了一些其他的插件,但我找不到任何东西,我总结说编写我自己的实现更容易.这就是我做的:

  • 添加邀请资源,

  • 当用户创建邀请时,我存储在邀请字段中(它是序列化哈希)我需要应用于接受邀请的用户的所有信息

  • 一封电子邮件发送给受邀用户,它包含如下链接:/ users/signup?invitation_token = 1231223123

  • 当用户点击链接时,我创建用户并应用邀请中存储的所有信息,如组成员身份,名称,角色......

  • 如果受邀用户不需要注册该服务,则电子邮件中的链接不同:invitations/123/accept?invitation_token = 12312312asdas324

希望这有帮助


And*_*ank 6

我通过覆盖invites控制器完成了这个,执行此操作的指令位于github上的devise_invitable主页面中,所以我不会在此处进行讨论.

为了安全起见,我创建了一个新表,其中包含额外的邀请信息,以便电子邮件接受链接不包含组链接(我的组仅通过私人邀请,因此我不希望受邀用户更改电子邮件中的邀请URL并可能添加其他未被邀请的群组.

在devise_invitable在用户表中创建新表后,新表将由用户标识索引.

class Users::InvitesController < Devise::InvitationsController
.
.
def create

    # make sure the current user is connected to this object for security
    if @object.has_connection_with(current_user)

      # perform the invite    
      self.resource = resource_class.invite!(params[resource_name], current_inviter)

      #since we invite based on object, we must reference this object once the user accepts, so we store this in our Invites table
      object_invite = Invite.new(:invitable_type => @object.class.name, :invitable_id => @object.id, :user_id => self.resource.id, :inviter_id => current_inviter.profile.id)
      object_invite.save!

      if resource.errors.empty?
        set_flash_message :notice, :send_instructions, :email => self.resource.email
        #respond_with resource, :location => after_invite_path_for(resource)
        render :json => {:status => 'success'} and return
      else
        respond_with_navigational(resource) { render_with_scope :new }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后在您的更新方法中(再次在同一个控制器中),您可以找到()邀请记录并提取所需的信息,以便您将新用户连接到该组.

剩下的唯一问题是如何在电子邮件中添加其他参数,例如我尚未解决的组名.