我遵循了 Michael Hartl 的 RoR 教程,用于建模用户、登录和注册。现在,我需要验证登录时给出的任何电子邮件都是真实的电子邮件,而不是与我在验证时使用的正则表达式匹配的随机字符串。
我知道 Devise 可以解决这个问题。而且我不想更改我拥有的工作代码。我怎么能只使用 Devise 的电子邮件验证功能?(不希望它为我做任何登录、会话和身份验证等)
如果不能以这种方式使用 Devise,那么将 Devise 插入我的 Rails 用户模型会有多大的破坏性?
谢谢 !
我遵循了 Michael Hartl 的 RoR 教程,用于建模用户、登录和注册。现在,我需要验证登录时给出的任何电子邮件都是真实的电子邮件,而不是与我在验证时使用的正则表达式匹配的随机字符串。
我知道 Devise 可以解决这个问题。而且我不想更改我拥有的工作代码。我怎么能只使用 Devise 的电子邮件验证功能?(不希望它为我做任何登录、会话和身份验证等)
如果不能以这种方式使用 Devise,那么将 Devise 插入我的 Rails 用户模型会有多大的破坏性?
谢谢 !
设计使用正则表达式验证电子邮件(使用正则表达式非常合乎逻辑)。
设计使用的正则表达式是:(从设计代码复制)
# Email regex used to validate email formats. It simply asserts that
# an one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
mattr_accessor :email_regexp
@@email_regexp = /\A[^@]+@([^@\.]+\.)+[^@\.]+\z/
如果您正在使用设计,则可以在设计初始化程序中更改此 reg exp。
如果您不需要设计,您可以自己实现电子邮件验证。
官方 Rails 指南Active Record Validations 文档中给出了一个非常好的示例。
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
record.errors[attribute] << (options[:message] || "is not an email")
end
end
end