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 更改用户密码功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.2 中手动发送密码重置请求?

如何在 Laravel 5 中更改默认重置密码链接

如何让用户在 Laravel 7.x 中更改自己的密码?

如何在 laravel 5.2 后同时获取电子邮件和密码

更改密码用户 laravel 5.3

Laravel 5.2 忘记密码的模式弹出窗口显示 500 内部服务器错误,同时运行 ajax 功能