Обновление пользователя создает новый хэш пустого пароля :( - PullRequest
0 голосов
/ 21 апреля 2010

Я создаю пользовательскую систему для Rails, а также для входа, регистрации и т. Д. Все работает.Потрясающие!По крайней мере, так я и думал.Я пытался обновить атрибут profile пользователя, но я не отправляю новый пароль или имя пользователя с ним.Я использую это в моей User модели:

protected

def after_validation
  self.password = Password::update(self.password)
end

Метод Password::update солит и хэширует пароль для безопасности.Проблема в том, что когда я не указываю password при сохранении, Rails пытается сохранить пустой пароль.Я использую это в моем UsersController:

  # PUT /users/1
  # PUT /users/1.xml
  # PUT /users/1.json
  def update
    @user = current_user

    respond_to do |format|
      if @user.update_attributes(params[:user])
        flash[:notice] = 'User was successfully updated.'
        format.html { redirect_to(@user) }
        format.xml  { head :ok }
        format.json { head :ok }
      else
        @user.password = "[FILTERED]" # Hide for security
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
        format.json { render :json => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

Однако моя модель проверяет пустые пароли, но все же (n) (соленый хеш) пустой пароль сохраняется.Но он должен сохранять поле :profile только в том случае, если оно задано единственно (и поле курса :updated_at).

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

Кто-нибудь может помочь?Спасибо

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Я уже сам это выяснил.

Я должен проверить, изменился ли пароль:

def after_validation
  self.password = Password::update(self.password) if password_changed?
end
0 голосов
/ 21 апреля 2010

Я не совсем уверен, что понимаю вашу проблему, но как насчет добавления:

validates_presence_of :password

def before_create
  self.password = Password::update(self.password)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...