当我用.更新我的模型绑定表单时
$user->update(Input::all())
我的密码字段被重新散列,即使它是空的.我已将我的User.PHP类设置为自动散列该字段,但是由于该字段为空,不应该跳过它?
解决方法:
你可以在这种情况下使用:
Input::except('password')
所以在你的控制器中你可以这样做:
if (trim(Input::get('password')) == '') {
$data = Input::except('password');
}
else {
$data = Input::all();
}
$user->update($data);
但是,您应该考虑其他可能的问题.在这种情况下,如果用户发送带有ID名称的输入(即使您的表单中没有此类字段,任何人都可以执行此操作),他可以轻松更改其他用户的密码/帐户并销毁您的整个数据.
您应该至少在您的用户模型中使用:
protected $guarded = array('id');
保护用户ID在mass assignment期间不被更改,但也许还有其他一些你想保护的字段(你应该在$guarded数组中列出它们.
$user = User::find($id);
if (trim(Input::get('password')) != '') {
$user->password = Hash::make(trim(Input::get('password')));
}
$user->name = Input::get('name');
// and so on - this way you kNow what you are changing and you won't change something you don't want to change
$user->save();