Laravel 5.3更改密码

时间:2016-11-12 15:00:42

标签: php laravel passwords laravel-5.3

我正在构建一个Laravel 5.3应用并使用basic auth laravel(artisan make:auth)。现在,"忘记密码"功能正常,所以如果用户无法登录,因为他不知道自己的密码,他可以收到邮件重置密码。但现在我希望登录用户也可以更改密码。我找到that,但这对我没有帮助。我也知道有ResetsPasswords特质,但我该如何使用它?是否已经有了我可以使用的观点?

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

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

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

正如您所看到的,我注册了一个新的自定义验证规则,以检查新的passowrd是否与旧的passowrd匹配,注册规则只需转到" 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.',
        ],
    ],

即便如此,现在您可以使用此功能更改当前用户密码:)

答案 1 :(得分:0)

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