【问题标题】:Laravel 5.3 Change PasswordLaravel 5.3 更改密码
【发布时间】:2017-03-26 15:17:10
【问题描述】:

我正在构建一个 Laravel 5.3 应用程序并使用 laravel 的 basic auth (artisan make:auth)。现在,“忘记密码”功能可以正常工作,所以如果用户因为不知道密码而无法登录,他可以通过邮件重置密码。但现在我希望登录用户也可以更改他们的密码。我找到了that,但这并没有真正帮助我。我也知道有一个 ResetsPasswords 特征,但我该如何使用它?还有我可以使用的视图吗?

有人可以帮我吗?

【问题讨论】:

    标签: php laravel passwords laravel-5.3


    【解决方案1】:

    您实际上不需要使用默认密码控制器来实现这一点,您可以编写自己的函数来获得相同的结果,例如:

    public function postUpdatePassword() {
    
            $user = Auth::user();
    
            $password = $this->request->only([
                'current_password', 'new_password', 'new_password_confirmation'
            ]);
    
            $validator = Validator::make($password, [
                'current_password' => 'required|current_password_match',
                'new_password'     => 'required|min:6|confirmed',
            ]);
    
            if ( $validator->fails() )
                return back()
                    ->withErrors($validator)
                    ->withInput();
    
    
            $updated = $user->update([ 'password' => bcrypt($password['new_password']) ]);
    
            if($updated)
                return back()->with('success', 1);
    
            return back()->with('success', 0);
        }
    

    如您所见,我注册了一个新的自定义验证规则来检查新密码是否与旧密码匹配,注册规则只需转到“app/Providers/AppServiceProvider.php”并将下一行添加到引导功能:

    Validator::extend('current_password_match', function($attribute, $value, $parameters, $validator) {
                return Hash::check($value, Auth::user()->password);
            });
    

    现在验证规则有效,但您不会收到错误消息,要向刚刚创建的新规则添加错误消息,您必须在“resources/lang/en/validation.php”中修改这些行:

    'custom' => [
            'current_password' => [
                'current_password_match' => 'Current password is incorrect.',
            ],
        ],
    

    就是这样,现在您可以使用此功能更改您当前的用户密码:)

    【讨论】:

    • 看起来不错,所以现在我只需要一个包含字段 current_passoword、new_password 和 new_password_confirm 的表单的视图并将其提交给该函数,对吗?
    【解决方案2】:

    如果你想保持你的 AppServiceProvider.php 文件没有闭包(无论出于什么原因;我个人喜欢这些小文件整洁),你可以添加执行以下两件事:

    1) 在 AppServiceProvider.php 的 boot() 方法中添加以下内容

    Validator::extend('current_password_match', 'App\Validators\PasswordMatch@check');
    

    2) 添加一个新文件 'app/Validators/PasswordMatch.php' 以符合上述闭包。

    <?php
    
    namespace App\Validators;
    use Hash;
    use Auth;
    
    class PasswordMatch
    {
        public function check($attribute, $value, $parameters, $validator){
    
            return Hash::check($value, Auth::user()->password);
    
        }
    
    }
    

    然后,您还可以将验证规则消息添加到扩展的 FormRequest 类 messages() 方法中,例如:

    'current_password_match' => 'Current password is incorrect',
    

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2017-03-14
      • 2017-09-28
      • 2017-12-07
      • 1970-01-01
      • 2017-03-24
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多