【问题标题】:Verify email address确认电子邮件地址
【发布时间】:2023-03-14 01:11:01
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 您只需要验证电子邮件地址字段。不需要宝石!
  • 什么意思?我需要验证/确认电子邮件是否存在。我可以给 chair@book.com,它看起来像是我的正则表达式的有效电子邮件地址。有什么想法吗?
  • 做你想做的事并不常见。读题太快了。
  • 这确实不常见......这就是我问这个问题的原因:)

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


【解决方案1】:

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

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

  # 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/

如果您正在使用 devise,您可以在 devise 初始化程序中更改此 reg exp。

如果您不需要设计,您可以自己实现电子邮件验证。

官方 Rails 指南中提供了一个非常好的示例,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

【讨论】:

  • 不幸的是,这不是我想要的。就像我在帖子中所说的那样,我已经有了电子邮件验证,这是我在用户模型中设置的第一件事。我所说的是电子邮件确认。 cf我对问题的第一个答案的评论。在查找 Devise 使用的正则表达式时 +1。
  • 那很抱歉。非常感谢您的 +1。所以我想我可以谈谈我对电子邮件确认的看法。我在我的项目中使用设计可能只是因为它关于电子邮件确认模块的功能。密码加密、会话管理等对我来说比处理确认令牌要容易得多(嗯,这并不难,但是当你多次做同样的事情时,它会变得很无聊,而且确认部分需要大量代码)。我同意你的观点,应该有一个仅用于电子邮件确认相关工作的 gem。
  • 再说一次,不是回答你的问题,但是this answer 指出电子邮件确认有很多工作要做,奇怪的是,没有专门用于这项工作的库。
  • 这正是我想要的,thanx。
【解决方案2】:

您需要的是devise confirmable。 (它会发送一封带有确认链接的电子邮件。)

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

要启用它,请检查this guidethis question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 2011-11-07
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多