Как безопасно запустить действие модели от пользователя link_to click? - PullRequest
0 голосов
/ 18 января 2012

Обзор того, что я пытаюсь сделать, - это повторно отправить электронное письмо «активировать учетную запись» пользователю по его запросу. Как правило, пользователь регистрируется и получает электронное письмо с кодом активации, которое отлично работает. Вот код в модели пользователя, который отправляет письмо активации при создании временного пользователя:

  def deliver_activation(invitation = nil)
    Mailer.activation(self, invitation).deliver
  end

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

<%= link_to "click here to resend" %>

Я просто не уверен, что это безопасный / оптимальный способ сделать это. Если это сделано через POST с user_id для отправки электронного письма, оно открыто для людей, отправляющих всем моим пользователям ссылку для активации. Как я могу разрешить пользователю повторно отправлять себе электронную почту? Я предполагаю, что мне нужно добавить что-то в один из моих контроллеров, чтобы вызвать это действие delivery_activation в моей модели ... но я не уверен как.

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Почему бы не позволить пользователю войти в систему с помощью имени входа / pwd, которое он создал, а затем сохранить поле «статус» в вашей базе данных, указывающее, активировал ли этот пользователь свой аккаунт. Если нет, показать ссылку на сайте:

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

0 голосов
/ 18 января 2012

Если вы сохраняете текущий идентификатор пользователя в переменной сеанса, вы можете просто использовать простое действие контроллера GET с перенаправлением для отправки электронной почты, например:

def deliver_activation(invitation = nil)
  user = @current_user
  Mailer.activation(user, invitation).deliver
  redirect_to "wherever you want to send them to"
end

Таким образом, только пользовательвошедший в систему может отправить письмо активации для себя.Это имеет смысл?

Надеюсь, это поможет

class ApplicationController < ActionController::Base

  protected

  helper_method :current_user 

  def current_user
    if session[:user_id]
      @current_user ||= User.find(session[:user_id])
    end
  end

  def current_user=(user)
    @current_user = user
    session[:user_id] = user.id
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...