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
Также:
- Как бы я назвал контроллер, отвечающий за ответ пользователя на щелчок URL-адреса в электронном письме? Как можно отформатировать URL-адрес, чтобы контроллер отвечал переключением состояния активации, которое у меня есть? Состояние является целочисленным значением с именами
:active
а также:inactive
с использованиемstate_machine
драгоценный камень. - Что такое RESTful способ указать маршрут? Как мне сгенерировать URL в user_mailer.rb? Должно ли это быть get или put в моем rout.rb?
2 ответа
Вот общий обзор решения.
В пользовательской модели вам понадобится логический столбец с состоянием по умолчанию false. Вам также понадобится строковый столбец для хранения токена. Токен будет случайной строкой, полученной чем-то вроде SecureRandom.urlsafe_base64
,
Затем вам нужен контроллер, который примет токен в качестве параметра, а затем найдет пользователя по его токену и изменит значение вышеупомянутого логического поля.
Затем вам потребуется почтовик, который отправит пользователю электронное письмо с URL для активации учетной записи.
Если у вас есть дополнительные вопросы, дайте мне знать.
Вы можете просто сделать это с полем токена. Когда они входят в систему и вводят правильный токен (доказывая, что они ввели правильное электронное письмо), столбцу токена в их записи в базе данных пользователя присваивается значение null, что означает, что они проверены.