Rails 4 подтверждает адрес электронной почты нового пользователя

Я прошел учебник по Rails 4 по адресу http://railstutorial.org/chapters и завершил большинство упражнений. Несколько из предложенных расширений для проекта находятся на вершине моего списка для следующего шага в создании моего приложения. Это подтверждение по электронной почте при регистрации и функция запоминания пароля. Я заметил, что несколько драгоценных камней помогут мне в этом, но когда я посмотрел несколько Railscasts и прочитал несколько учебных пособий, они на самом деле не относились к моей ситуации или не включали сложный драгоценный камень для обработки всего этого (Devise). Кроме того, в учебнике для Devise всегда предполагалось, что я начинаю с нуля, а это не так, как я уже говорил. Может ли кто-нибудь помочь мне или указать мне правильное направление для выполнения этих двух функций с моим ограниченным опытом, который считается безопасным и простым в реализации?

Кроме того, стоит упомянуть, что я в конечном итоге выбрал state_machine в качестве полезного драгоценного камня для использования этой функциональности, а также будущей функциональности. Если у кого-то есть мысли об этом, так или иначе, я хотел бы услышать. Прямо сейчас в моей модели User существуют два состояния: неактивное и активное.

Пожалуйста, дайте мне знать, если я могу уточнить что-нибудь. Спасибо!

Редактировать:

Я решил добавить ссылку для регистрации в электронном письме, которое я отправляю пользователям, которые регистрируются на моем сайте. Я создал класс UserMailer, который успешно отправляет электронное письмо пользователю при регистрации. Я обдумываю, куда поместить обновление атрибута email_token моей таблицы пользователей:

  • Опция 1:

/app/controllers/users_controller.rb

 ...
 def create
   redirect_to_root_if_signed_in

   @user = User.new(user_params)

   if @user.save
     sign_in @user
+    @user.update_attribute(email_token: User.encrypt(User.new_token))
     UserMailer.signup_confirmation(@user).deliver
     flash[:success] = "Welcome to the Sample App!"
     redirect_to @user
   else
     render 'new'
   end
 end
 ...
  • Вариант 2:

/app/models/user.rb

   before_create :create_email_token

 ...

   private

     def create_email_token
       self.email_token = User.encrypt(User.new_token)
     end

Также:

  1. Как бы я назвал контроллер, отвечающий за ответ пользователя на щелчок URL-адреса в электронном письме? Как можно отформатировать URL-адрес, чтобы контроллер отвечал переключением состояния активации, которое у меня есть? Состояние является целочисленным значением с именами :activeа также :inactive с использованием state_machine драгоценный камень.
  2. Что такое RESTful способ указать маршрут? Как мне сгенерировать URL в user_mailer.rb? Должно ли это быть get или put в моем rout.rb?

2 ответа

Решение

Вот общий обзор решения.

В пользовательской модели вам понадобится логический столбец с состоянием по умолчанию false. Вам также понадобится строковый столбец для хранения токена. Токен будет случайной строкой, полученной чем-то вроде SecureRandom.urlsafe_base64,

Затем вам нужен контроллер, который примет токен в качестве параметра, а затем найдет пользователя по его токену и изменит значение вышеупомянутого логического поля.

Затем вам потребуется почтовик, который отправит пользователю электронное письмо с URL для активации учетной записи.

Если у вас есть дополнительные вопросы, дайте мне знать.

Вы можете просто сделать это с полем токена. Когда они входят в систему и вводят правильный токен (доказывая, что они ввели правильное электронное письмо), столбцу токена в их записи в базе данных пользователя присваивается значение null, что означает, что они проверены.

Другие вопросы по тегам