3

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

我知道 Devise 可以解决这个问题。而且我不想更改我拥有的工作代码。我怎么能只使用 Devise 的电子邮件验证功能?(不希望它为我做任何登录、会话和身份验证等)

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

谢谢 !

4

2 回答 2

3

设计使用正则表达式验证电子邮件(使用正则表达式非常合乎逻辑)。

设计使用的正则表达式是:(从设计代码复制)

  # 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
于 2012-07-05T06:43:27.483 回答
1

你需要的是设计可确认的。(它会发送一封带有确认链接的电子邮件。)

这个 railscast 应该有帮助:http ://railscasts.com/episodes/209-introducing-devise 。

要启用它,请查看本指南此问题

于 2013-07-08T16:15:58.150 回答