Требование пользователя ввести пароль для обновления профиля - PullRequest
2 голосов
/ 28 апреля 2011

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

def update
  @user = User.find(params[:id])
  if @user.has_password?(params[:user][:password])
    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated."
      redirect_to @user
    else
      render 'edit'
    end
  else
    flash[:failure] = "Password does not match!"
    render 'edit'
  end
end

Я чувствую, что есть лучший способ сделать это.Например, я мог бы сделать пароль, соответствующий проверке в пользовательской модели.Тогда formtastic автоматически обработает для меня сообщение об ошибке (в отличие от моего уродливого подхода флэш-памяти выше).Я попытался сделать это с

validate :password_match?, :on => :update

И

def password_match?
  has_password(params[:user][:password])
end

Но так как подозреваемые параметры не доступны из модели.

Я искал SO в течение 20 минут, чтобы найти способчтобы сделать это, не смог найти ничего, что не включало бы Devise или Authlogic.Я делаю аутентификацию с нуля (все отлично работает: вход, сеансы и т. Д.).

Пожалуйста, покажите мне свет лучше!

1 Ответ

1 голос
/ 28 апреля 2011

Вам не нужно придумывать, просто используйте фильтр до на вашем контроллере при обновлении На вашем контроллере профиля.

before_filter password_match, :only => :update

затем внизу как частный.


private

def password_match
   @user = User.find(params[:id])
   @user.has_password?(params[:user][:password])

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