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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...