Laravel 5.2 更改用户密码功能


Laravel 5.2 Change user password functionality

我正在使用laravel 5.2中包含的身份验证:

https://laravel.com/docs/5.2/authentication#included-routing

我想为经过身份验证的用户实现"更改密码"功能,我有两个选择:

  1. 我可以使用包含的"/密码/重置"路由,不是最佳的,但还可以。但它仅在用户未登录时才有效。我也可以使其适用于经过身份验证的用户吗?

  2. 我可以在视图中创建一个"输入新密码"表单,并在UsersController中创建updatePassword方法。但是我需要检查提交的密码是否不为空,这意味着用户想要更改它,然后应用验证规则,然后加密并更新它。这是正确的做法吗?任何例子将不胜感激。

我认为#2是要走的路,它只是用户设置表单中的另一个字段。 在我的应用程序中,它看起来像这样:

$user->update($request->except('password'));
if($request->get('password') != ""){
    $user->password = Hash::make($request->get('password'));
}
$user->save();

做了一个特殊的检查,以确保我不会从空白字段更新密码。 为味道添加验证。

您可以在模型中设置设置属性,例如

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

我已经在我的用户文件中实现了更改密码,如下所示

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