0

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

随着时间的推移,电子邮件将被添加到该列表中。这意味着今天有 10 封电子邮件,明天还有 20 多封。

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

我知道我必须这样做Create my own Registrations Controller,并且对于验证,我认为我需要类似的东西:

before_validation :whitelisted?

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

但是,我对如何开始或继续这一点一无所知。我什至不知道这是否是最佳实践。

我如何将电子邮件添加到该白名单以及该白名单在哪里?

如果有人可以足够友好地向我解释这一点。

4

2 回答 2

2

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

创建新的注册控制器

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" }

使用以下创建新模型白名单

rails g model whitelist email:string

并运行rake db:migrate命令。

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

Whitelist.create(email: "test@user.com")
于 2013-10-02T07:35:59.560 回答
1

我发现@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

这解决了将电子邮件列入白名单时区分大小写的问题,并在列入白名单的电子邮件不匹配时生成闪现错误消息。

于 2015-11-04T13:54:07.123 回答