我遵循了Michael Hartl的RoR教程,用于建模用户,登录和注册。 现在,我需要验证登录时给出的任何电子邮件都是真实的电子邮件,而不是一些与验证时使用的正则表达式匹配的随机字符串。
我知道Devise会处理这个问题。而且我不想改变我的工作代码。我怎么才能使用Devise的电子邮件验证功能? (不要让它为我做任何登录,会话和身份验证等)
如果不可能以这种方式使用Devise,那么将Devise插入我的Rails用户模型会有多么糟糕?
谢谢!
答案 0 :(得分:3)
Devise使用regexp验证电子邮件(使用regexp这是非常合乎逻辑的。)
设计使用的正则表达式是:(从设计代码中复制)
# 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。
如果您不需要设计,您可以自行实施电子邮件验证。
官方导轨指南Active Record Validations document中提供了一个非常好的示例。
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
答案 1 :(得分:1)
您需要的是devise confirmable。 (它发送一封带有确认链接的电子邮件。)
此railscast应该有所帮助:http://railscasts.com/episodes/209-introducing-devise。
要启用它,请检查this guide或this question。