验证电子邮件时例外

时间:2016-05-30 08:13:37

标签: ruby-on-rails ruby validation email

我目前的电子邮件验证如下:

validates :email, presence: true, length: { maximum: 255 },
            format: { with: VALID_EMAIL_REGEX, message: "Must be your 
            <domain name> email address." },
            uniqueness: { case_sensitive: false }

这适用于我的应用程序的所有用户,除了一个,没有电子邮件属于所需域的管理员,并且由于情况,我无法为他创建一个。

如何允许此管理员使用其电子邮件注册帐户,绕过常规电子邮件验证?

4 个答案:

答案 0 :(得分:1)

你能尝试使用validate:false参数保存方法吗? 见here

保存(options = {})

通过传递validate:false可以跳过保存验证过程。当混合使用验证模块时,常规的#save方法将被替换为默认情况。

保存!(选项= {})

尝试像#save一样保存记录但会引发RecordInvalid异常,而不是在记录无效时返回false。

您还可以查看此answer

<强> UPD 即可。如评论中所示,这对于管理员帐户的少数(手动)创建很有用,可以关闭所有验证。

答案 1 :(得分:0)

我会做这样的事情:

(3, 10, 10)

答案 2 :(得分:0)

您可以使用:ifunless将条件传递给验证。如下所示:

validates :email, presence: true, length: { maximum: 255 },
  format: { with: VALID_EMAIL_REGEX, message: "Must be your 
  <domain name> email address." },
  uniqueness: { case_sensitive: false }, 
  unless: :admin?

您必须定义方法admin?以检查用户是否为管理员。

答案 3 :(得分:0)

基本上,您提到的验证需要2件事情:

  • 验证:uniqueness, length,这适用于adminnormal user
  • 验证:format,但Admin
  • 除外

所以我的想法是为管理员创建一个白名单:

validates :email, presence: true, length: { maximum: 255 }, uniqueness: { case_sensitive: false }

validates format: { with: VALID_EMAIL_REGEX, message: "Must be your 
            <domain name> email address." }, unless: :in_admin_whitelist?

def in_admin_whitelist?
   email.in? ADMIN_WHITELIST
end

应该从环境变量

加载ADMIN_WHITE_LIST

<强>配置/初始化/ admin.rb

ADMIN_WHITELIST = ENV['ADMIN_WHITELIST'].to_s.split(/,/)

因此,您可以在环境变量中设置的管理员白名单值格式如下:

admin@admin.com,admin2@admin.com

这将足够安全和​​灵活!