如何阻止 "mail.ru" 和“163.com”电子邮件注册 (Devise + Rails 4)

How to block "mail.ru" and "163.com" emails from signing up (Devise + Rails 4)

我看到很多来自这些电子邮件 ID 的注册,我想阻止他们。我正在使用 Devise + Rails 4.

在我的user.rb中,我在玩

validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/

但我不确定如何使用格式来阻止这些域。有什么帮助吗?

这是否是正确的方法,或者我们是否可以有更好的方法通过 Devise 阻止一些 domains/free 电子邮件提供商?

编辑 - 我发现 http://guides.rubyonrails.org/active_record_validations.html,第 2.5 格式 部分我仍然可以使用 without:,我不确定如何阻止来自 163.com 和 mail.ru 的电子邮件注册,我可以使用 "validates:" 两次,因为编写一个正则表达式来排除两者会很困难吗?

只需将其放在某处,您可以按原样保留验证。

class User < ActiveRecord::Base

EXCLUDE_DOMAINS = %w{163.com mail.ru}

before_validation do
  domains = EXCLUDE_DOMAINS.join('|')
  pattern = %r{@#{domains}$}
  if matched_domain = pattern.match(self.email)
    self.errors.add(:email, "can't be #{matched_domain}")
  end
end