确认电子邮件地址

时间:2012-07-05 04:02:11

标签: ruby-on-rails devise email-confirmation

我遵循了Michael Hartl的RoR教程,用于建模用户,登录和注册。 现在,我需要验证登录时给出的任何电子邮件都是真实的电子邮件,而不是一些与验证时使用的正则表达式匹配的随机字符串。

我知道Devise会处理这个问题。而且我不想改变我的工作代码。我怎么才能使用Devise的电子邮件验证功能? (不要让它为我做任何登录,会话和身份验证等)

如果不可能以这种方式使用Devise,那么将Devise插入我的Rails用户模型会有多么糟糕?

谢谢!

2 个答案:

答案 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 guidethis question