Подтвердите адрес электронной почты

Я следил за руководством по RoR от Майкла Хартла для моделирования пользователей, входа и регистрации. Теперь я нахожусь в ситуации, когда мне нужно убедиться, что любой адрес электронной почты, указанный при входе в систему, является реальным адресом электронной почты, а не какой-то случайной строкой, которая соответствует регулярному выражению, которое у меня есть при проверке.

Я знаю, что Девайз справится с этим. И я не хочу менять рабочий код, который у меня есть. Как я могу использовать ТОЛЬКО функцию проверки электронной почты, которая есть в Devise? (не хочу, чтобы он выполнял вход, сеансы, аутентификацию и т. д. для меня)

Если невозможно использовать Devise таким образом, насколько разрушительным будет подключение Devise к моей пользовательской модели Rails?

Спасибо !


person Myna    schedule 05.07.2012    source источник
comment
вам просто нужно подтвердить поле адреса электронной почты. для этого не нужен драгоценный камень!   -  person c0deNinja    schedule 05.07.2012
comment
Что ты имеешь в виду ? Мне нужно проверить/подтвердить, что электронная почта существует. Я мог бы указать [email protected], и это выглядело бы как действительный адрес электронной почты для моего регулярного выражения. Любые идеи ?   -  person Myna    schedule 05.07.2012
comment
не очень часто делать то, что вы пытаетесь сделать. слишком быстро прочитал вопрос.   -  person c0deNinja    schedule 05.07.2012
comment
Это действительно нечасто... Поэтому я и задаю вопрос :)   -  person Myna    schedule 05.07.2012


Ответы (2)


Devise проверяет электронные письма с помощью регулярного выражения (очень логично сделать это с помощью регулярного выражения).

Регулярное выражение, используемое devise: (скопировано из кода 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.

Если вам не нужна разработка, вы можете реализовать проверку электронной почты самостоятельно.

Очень хороший пример приведен в официальных руководствах по рельсам, документе 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
person Alper Karapınar    schedule 05.07.2012
comment
К сожалению, это не то, о чем я прошу. Как я уже сказал в своем посте, у меня уже есть проверка электронной почты, одна из первых вещей, которую я настроил в пользовательской модели. Я говорю о подтверждении по электронной почте. см. мой комментарий к первому ответу на вопрос. +1 при поиске регулярного выражения, используемого Devise. - person Myna; 05.07.2012
comment
Ну тогда очень жаль. И большое спасибо за +1. Так что я думаю, что могу рассказать о своем мнении о подтверждении по электронной почте. Я использую devise в своих проектах, может быть, только из-за его функций модуля подтверждения электронной почты. Шифрование паролей, управление сессиями и т. д. для меня намного проще, чем обработка токенов подтверждения (ну, это не так уж сложно, но когда вы делаете одно и то же много раз, это становится скучным, а часть подтверждения требует большого количества кода). Я согласен с вами, что гем должен быть только для вакансий, связанных с подтверждением по электронной почте. - person Alper Karapınar; 06.07.2012
comment
Опять же, не отвечая на ваш вопрос, но этот ответ указывает, что для подтверждения по электронной почте нужно проделать большую работу, и странно, что нет библиотеки только для этой работы. - person Alper Karapınar; 06.07.2012
comment
Это именно то, что я хочу, спасибо. - person Jigar Bhatt; 23.09.2014

Что вам нужно, так это подтверждение разработки. (Он отправляет электронное письмо со ссылкой для подтверждения.)

Этот railscast должен помочь: http://railscasts.com/episodes/209-introduction-devise.

Чтобы включить его, ознакомьтесь с этим руководством или этот вопрос.

person Benjamin Crouzier    schedule 08.07.2013