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

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

ОБНОВЛЕНИЕ

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

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

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

  3. Уточнить

    разработать: подтвердить в вашей модели.

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

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

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

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


person Shreyas    schedule 21.10.2010    source источник
comment
Не могли бы вы прокомментировать, почему был выбран ответ Марана? Я собираюсь сделать это, но пытаюсь решить, делать это с нуля (ответ Пола) или с помощью плагина. Может быть, вы могли бы поделиться своим опытом.   -  person JnBrymn    schedule 05.02.2011
comment
Конечно, я обновил свой пост и объяснил, как заставить его работать.   -  person Shreyas    schedule 05.02.2011
comment
@Shreyas, значит, вы использовали devise только для подтверждения аккаунта? У вас уже есть регистрационная деталь? Я спрашиваю, потому что у меня уже есть часть регистрации, работающая в моем приложении, но я хотел бы добавить подтверждение, но только это одно.   -  person Cas    schedule 26.06.2014


Ответы (3)


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

  • Создайте атрибуты «код подтверждения» и «подтверждено» в своей пользовательской модели.
  • Создайте новый метод контроллера на своем пользовательском контроллере, который ожидает идентификатор пользователя и код подтверждения, выполняет поиск пользователя, а затем проверяет, соответствует ли код в параметре коду, хранящемуся в БД. Если это так, он очищает код и устанавливает подтвержденное = true.
  • Создайте маршрут, который отображает, например, / users / 1 / confirm / code к новому методу контроллера.
  • Создайте шаблон ActionMailer для сообщения электронной почты, которое вы хотите отправить. Это должно принять пользователя в качестве параметра и использовать код подтверждения пользователя для отправки письма, содержащего ссылку на ваш новый маршрут.
  • Создайте наблюдателя для вашей пользовательской модели. Если запись создана или адрес электронной почты изменен, сгенерируйте случайный код подтверждения, установите его в модель и снимите флажок подтверждения. Затем запустите свой ActionMailer.
  • Создайте вспомогательный метод, который позволяет представлениям проверять, подтвержден ли текущий пользователь.
  • Используйте этот метод для включения / выключения соответствующих функций. Не забудьте защитить методы вашего контроллера, а также логику представления.
person Paul Russell    schedule 21.10.2010
comment
Почему вы предлагаете не использовать Devise для активации по электронной почте? В настоящее время у меня такая же проблема, и я разработал для аутентификации, но mailgun для отправки по электронной почте, и в настоящее время я изучаю свои варианты - person tvieira; 24.01.2014
comment
@TiagoOrnelasVieira Я не предлагаю избегать Devise, но исходный вопрос указывал, что это следует делать без Devise / Authlogic. Похоже, вопрос обновлен. - person Paul Russell; 29.01.2014

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

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

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

@user = User.certified.find_by_username(foo)
person user1017926    schedule 25.12.2012

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

person Maran    schedule 21.10.2010
comment
devise очень прост в установке и делает именно то, что вам нужно. - person thenengah; 21.10.2010