微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 更新用户时,Laravel空密码被哈希处理

当我用.更新我的模型绑定表单时

$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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐