Я создаю пользовательскую систему для 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
игнорировал пароль, если он не установлен.
Кто-нибудь может помочь?Спасибо