我目前的电子邮件验证如下:
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX, message: "Must be your
<domain name> email address." },
uniqueness: { case_sensitive: false }
这适用于我的应用程序的所有用户,除了一个,没有电子邮件属于所需域的管理员,并且由于情况,我无法为他创建一个。
如何允许此管理员使用其电子邮件注册帐户,绕过常规电子邮件验证?
答案 0 :(得分:1)
你能尝试使用validate:false参数保存方法吗? 见here
保存(options = {})
通过传递validate:false可以跳过保存验证过程。当混合使用验证模块时,常规的#save方法将被替换为默认情况。
保存!(选项= {})
尝试像#save一样保存记录但会引发RecordInvalid异常,而不是在记录无效时返回false。
您还可以查看此answer
<强> UPD 即可。如评论中所示,这对于管理员帐户的少数(手动)创建很有用,可以关闭所有验证。
答案 1 :(得分:0)
我会做这样的事情:
(3, 10, 10)
答案 2 :(得分:0)
您可以使用:if
或unless
将条件传递给验证。如下所示:
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
,这适用于admin
或normal 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
这将足够安全和灵活!