Laravel 5.2 更改用户密码功能
Posted
技术标签:
【中文标题】Laravel 5.2 更改用户密码功能【英文标题】:Laravel 5.2 Change user password functionality 【发布时间】:2016-05-29 18:28:05 【问题描述】:我正在使用 laravel 5.2 中包含的身份验证:
https://laravel.com/docs/5.2/authentication#included-routing
我想为经过身份验证的用户实现“更改密码”功能,我有两个选择:
我可以使用包含的 '/password/reset' 路由,虽然不是最佳但还可以。但它只在用户未登录时有效。我可以让它对经过身份验证的用户也有效吗?
我可以在视图中创建一个“输入新密码”表单,并在 UsersController
中创建一个 updatePassword
方法。但是我需要检查提交的密码是否不为空,这意味着用户想要更改它,然后应用验证规则,然后加密并更新它。这是正确的做法吗?任何示例将不胜感激。
【问题讨论】:
【参考方案1】:我认为#2 是要走的路,它只是用户设置表单中的另一个字段。在我的应用中,它看起来像这样:
$user->update($request->except('password'));
if($request->get('password') != "")
$user->password = Hash::make($request->get('password'));
$user->save();
我进行了一项特殊检查,以确保我不会从空白字段更新密码。添加验证以适应口味。
【讨论】:
是的,我会选择那个选项。谢谢。【参考方案2】:您可以在模型中设置 set 属性,例如
public function setPasswordAttribute($value)
$this->attributes['password'] = bcrypt($value);
在编辑方法中:
if (empty($request->password))
$data = $request->except('password');
else
$data = $request->all();
$user = $this->userRepository->update($data, $id);
【讨论】:
【参考方案3】:我已经在我的用户文件中实现了更改密码,如下所示
public function postReset(Request $request)
$this->validate($request, [
'password' => 'required|confirmed','email' => 'required|email',
]);
$user = User::findOrFail($id);
$input = $request->input();
//Change Password if password value is set
if ($input['password'] != "")
//dd(bcrypt($input['password']));
$input['password'] = bcrypt($input['password']);
$user->fill($input)->save();
【讨论】:
以上是关于Laravel 5.2 更改用户密码功能的主要内容,如果未能解决你的问题,请参考以下文章