Laravel 5.2更改用户密码功能

时间:2016-02-17 20:29:42

标签: php laravel login laravel-5

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

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

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

  1. 我可以使用附带的'/ password / reset'路线,但不是最佳路线。但它仅在用户未登录时才有效。我是否可以让它对经过身份验证的用户起作用?

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

3 个答案:

答案 0 :(得分:1)

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

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

我会进行特殊检查,以确保我不会从空白字段更新密码。添加验证味道。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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