使用 Devise 邀请链接
Invite Links with Devise
我想建立一个邀请系统,每个注册用户都有一个唯一的邀请 link。当他们的朋友使用那个 link 注册时,他们都会得到好处。您还应该能够通过社交媒体或电子邮件发送 link。
我的意思的一个例子是airbnb的邀请系统:
我试过使用 devise invitable,但效果似乎不同。似乎先用电子邮件注册用户,然后在他们接受邀请后注册。这不允许社交媒体共享。
那么,我该如何构建这样一个邀请系统以及如何将它与设计集成。
您可以为此 link 创建特定的路由,例如 /r/1234
(其中 1234
)是分配给推荐人的推荐人代码。
裁判通过此 link 分配给此路由控制器后,您将设置 cookie referrer=1234
并重定向到注册页面。
让我们添加到 User
模型:referrer_code_on_signup 属性:
class User < ApplicationRecord
attr_accessor :referrer_code_on_signup
after_commit :grand_rewards, on: create
# ... other user stuff
private
def grand_rewards
return unless referrer_code_on_signup.present?
# some rewards logic
end
end
如果裁判通过注册表单并提交,您应该调整注册控制器:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
if cookies[:referrer].present?
build_resource(referrer_code_on_signup: cookies[:referrer])
else
build_resource
end
end
end
然后告诉设计使用该控制器而不是默认控制器:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
特殊航线:
您可以创建 ReferrerController:
# app/controllers/referrers_controller.rb
class ReferrersController < ApplicationController
before_action :set_referrer
# Endpoint for share referrer link like example.com/r/123456 - redirects to
# sign in page and setup referrer cookies
def show
cookies[:referrer] = @referrer.referrer_code if @referrer.present?
redirect_to user_sign_up_path
end
private
def set_referrer
@referrer = User.find_by(referrer_code: params[:id])
end
end
并使用以下行更新您的路线:
resources :referrers, only: :show, path: :r
我们假设您的 User
模型已 referrer_code
存储在数据库中并在注册时分配随机的唯一值
我想建立一个邀请系统,每个注册用户都有一个唯一的邀请 link。当他们的朋友使用那个 link 注册时,他们都会得到好处。您还应该能够通过社交媒体或电子邮件发送 link。
我的意思的一个例子是airbnb的邀请系统:
我试过使用 devise invitable,但效果似乎不同。似乎先用电子邮件注册用户,然后在他们接受邀请后注册。这不允许社交媒体共享。
那么,我该如何构建这样一个邀请系统以及如何将它与设计集成。
您可以为此 link 创建特定的路由,例如 /r/1234
(其中 1234
)是分配给推荐人的推荐人代码。
裁判通过此 link 分配给此路由控制器后,您将设置 cookie referrer=1234
并重定向到注册页面。
让我们添加到 User
模型:referrer_code_on_signup 属性:
class User < ApplicationRecord
attr_accessor :referrer_code_on_signup
after_commit :grand_rewards, on: create
# ... other user stuff
private
def grand_rewards
return unless referrer_code_on_signup.present?
# some rewards logic
end
end
如果裁判通过注册表单并提交,您应该调整注册控制器:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
if cookies[:referrer].present?
build_resource(referrer_code_on_signup: cookies[:referrer])
else
build_resource
end
end
end
然后告诉设计使用该控制器而不是默认控制器:
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
特殊航线: 您可以创建 ReferrerController:
# app/controllers/referrers_controller.rb
class ReferrersController < ApplicationController
before_action :set_referrer
# Endpoint for share referrer link like example.com/r/123456 - redirects to
# sign in page and setup referrer cookies
def show
cookies[:referrer] = @referrer.referrer_code if @referrer.present?
redirect_to user_sign_up_path
end
private
def set_referrer
@referrer = User.find_by(referrer_code: params[:id])
end
end
并使用以下行更新您的路线:
resources :referrers, only: :show, path: :r
我们假设您的 User
模型已 referrer_code
存储在数据库中并在注册时分配随机的唯一值