用于在Devise上注册的Beta(白名单)电子邮件列表

我正在使用Devise,我正在尝试构建一个要求,即只有我的白名单中包含的电子邮件才能实际注册。

随着时间的推移,电子邮件将添加到该列表中。 意思是今天有10封电子邮件,明天又有20封以上。

但我还不知道如何实现这一目标。

我知道我必须Create my own Registrations Controller ,并且对于validation我认为我需要类似于此的东西:

 before_validation :whitelisted? def whitelisted? unless WhiteList.exists?(:email => email) errors.add :email, "is not on our beta list" end end 

但是,我对如何开始或继续这一点毫无头绪。 我甚至都不知道这是不是最好的做法。

如何将电子邮件添加到该白名单,哪些甚至是白名单?

如果有人可以通奸友好到足以向我解释这一点。

尝试以下我认为这可以帮助你。

创建新的注册控制器

 class RegistrationsController < Devise::RegistrationsController def create unless WhiteList.exists?(:email => params[:user][:email]) errors.add :email, "is not on our beta list" else super end end end 

并在路径文件中替换现有的以下内容

 devise_for :users, controllers: { registrations: "registrations" } 

使用以下方法创建新模型WhiteList

 rails g model whitelist email:string 

并运行rake db:migrate命令。

在此启动后, Rails控制台使用以下命令添加电子邮件。

 Whitelist.create(email: "test@user.com") 

我发现@Amit Sharma的答案很有用,但它不能直接开箱即用。 这就是我想出的:

 class RegistrationsController < Devise::RegistrationsController def create if WhiteList.exists?(:email => params[:user][:email].downcase) super else flash[:error] = "Your email is not on our beta list." redirect_to new_user_registration_path end end end class WhiteList < ActiveRecord::Base before_save :downcase_email validates :email, presence: true def downcase_email self.email = email.downcase end end 

这解决了将电子邮件列入白名单时的大小写敏感性,并在白名单电子邮件不匹配时生成闪存错误消息。