Laravel 5.3修改密码


Laravel 5.3 Change Password

我正在构建一个Laravel 5.3应用程序,并使用Laravel (artisan make:auth)的basic auth。现在,"忘记密码"功能运行良好,所以如果用户因为不知道密码而无法登录,他可以收到一封邮件来重置密码。但现在我希望登录用户也可以更改他们的密码。我找到了,但这对我没什么帮助。我也知道有一个ResetsPasswords特征,但我如何使用它?有没有我可以使用的视图?

有人能帮我一下吗?

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

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.',
        ],
    ],

就这样,现在您可以使用这个函数来更改当前用户的密码了:)

如果你想保持你的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',