我正在使用设计来管理我的 rails 应用程序中的用户身份验证。设计真的很棒。
但是我对我的应用程序有一个特殊要求:用户必须先被列入白名单,然后才能注册为用户。
所以有一个管理员可以创建一个允许的电子邮件列表。用户使用电子邮件注册,如果该电子邮件在白名单表中,他将被注册。但是,如果该邮件不在白名单中,则应中止注册,并显示“您尚未被邀请”之类的消息。
你知道如何通过设计解决这个问题吗?
提前致谢。
我正在使用设计来管理我的 rails 应用程序中的用户身份验证。设计真的很棒。
但是我对我的应用程序有一个特殊要求:用户必须先被列入白名单,然后才能注册为用户。
所以有一个管理员可以创建一个允许的电子邮件列表。用户使用电子邮件注册,如果该电子邮件在白名单表中,他将被注册。但是,如果该邮件不在白名单中,则应中止注册,并显示“您尚未被邀请”之类的消息。
你知道如何通过设计解决这个问题吗?
提前致谢。
我只会使用模型验证。我假设您的 User 类具有设计方法
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable #etc
before_validation :whitelisted
def whitelisted
unless celebrityemail.include? email
errors.add :email, "#{email} is not on our invitation list"
end
end
end
您可以做的是创建自己的注册控制器并扩展设备,例如:
class MyRegistrationController < Devise::RegistrationsController
def create
# do your checks
super
end
end
请参阅:https ://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb 和:https ://github.com/plataformatec/devise/wiki/How-to:-Customize-路由到用户注册页面
祝你好运!
我确实按照建议创建了自己的控制器:
class Users::RegistrationsController < Devise::RegistrationsController
def create
email = params[:user][:email]
if Admin::Whitelist.find_by_email(email) != nil
super
else
build_resource
set_flash_message :error, "You are not permitted to sign up yet. If you have already payed your registration fee, try again later."
render_with_scope :new
end
end
end
我把它放在app/users/registrations_controller.rb
. 然后我不得不将设计注册视图复制到其中app/views/users/registrations
,因为未使用默认视图。
现在正在运行,感谢您的帮助