Подтверждение электронной почты в Rails без использования каких-либо существующих гемов / плагинов аутентификации - PullRequest
32 голосов
/ 21 октября 2010

Я работаю над этим сервисом оповещений в Rails.И действительно, все, что мне нужно сделать, это, когда пользователь зарегистрируется, отправить подтверждение по электронной почте пользователю.И после подтверждения от пользователя, активируйте пользователя.Я попытался поиграть с учебником по активации электронной почты Мэтта Хукса, но он действительно ни к чему не привел.Итак, есть идеи, как я могу сделать это с минимальными усилиями?Спасибо !

ОБНОВЛЕНИЕ

Итак, как я получил устройство для выполнения работы за меня:

  1. Установите драгоценный камень.

  2. Создание миграции для подтверждаемых полей устройства.

  3. Укажите

    devise: подтверждается в вашей модели.

  4. Создайте метод подтверждения в соответствующем контроллере (и маршрутедля этого метода), который обновит атрибут valid_at соответствующей модели.

  5. Генератор разработок создаст для вас несколько представлений, одно из которых - translation_instructions.html.erb.Настройте путь там.

Я использовал Rails 2.3.2, и я использовал этот метод вместе с аутентификацией Authlogic, и он работал хорошо.Я планирую перейти на разработку полностью.

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

Ответы [ 3 ]

71 голосов
/ 21 октября 2010

Предполагая, что с учетом названия, которое вы определенно хотите избежать Devise, Authlogic и друзей, вот что, я думаю, вам нужно сделать:

  • Создание атрибутов «код подтверждения» и «подтвержденный» в вашем пользователемодель.
  • Создайте новый метод контроллера на вашем пользовательском контроллере, который ожидает идентификатор пользователя и код подтверждения, ищет пользователя и затем проверяет, совпадает ли код в параметре с кодом, хранящимся в БД.Если это так, он очищает код и устанавливает подтвержденный = true.
  • Создайте маршрут, который сопоставляет, например, / users / 1 / verify / code с вашим новым методом контроллера.
  • Создайте шаблон ActionMailer дляэлектронное письмо, которое вы хотите отправить.Это должно принять пользователя в качестве параметра и использовать код подтверждения пользователя для отправки почты, содержащей ссылку на ваш новый маршрут.
  • Создайте наблюдателя для вашей пользовательской модели.Если запись создана или адрес электронной почты изменен, сгенерируйте случайный код подтверждения, установите его в модель и снимите флажок подтверждения.Затем запустите ActionMailer.
  • Создайте вспомогательный метод, который позволяет представлениям проверять, подтвержден ли текущий пользователь.
  • Используйте этот метод для включения / отключения соответствующей функции.Не забывайте защищать методы контроллера соответствующим образом, а также логику представления.
5 голосов
/ 25 декабря 2012

Вы также можете использовать области для выбора пользователей.

class User < ActiveRecord::Base
  scope :certified, where(:certified => true)
end

А затем в вашем коде:

@user = User.certified.find_by_username(foo)
4 голосов
/ 21 октября 2010

Devise - это еще одна отличная жемчужина аутентификации, которая поставляется со встроенной активацией электронной почты, возможно, вы могли бы попробовать.

...