我正在构建Laravel 5.3应用程序并使用laravel的basic auth
(artisan make:auth
)。现在,“忘记密码”功能可以正常工作,所以如果用户由于不知道密码而无法登录,他可以通过邮件重置密码。但现在我希望登录的用户也可以更改他们的密码。我发现that,但这并不能真正帮助我。我也知道有ResetsPasswords
的特质,但我该如何使用它?那么我是否也有一个观点可以使用?Laravel 5.3更改密码
有人可以帮我吗?
我正在构建Laravel 5.3应用程序并使用laravel的basic auth
(artisan make:auth
)。现在,“忘记密码”功能可以正常工作,所以如果用户由于不知道密码而无法登录,他可以通过邮件重置密码。但现在我希望登录的用户也可以更改他们的密码。我发现that,但这并不能真正帮助我。我也知道有ResetsPasswords
的特质,但我该如何使用它?那么我是否也有一个观点可以使用?Laravel 5.3更改密码
有人可以帮我吗?
你实际上并不需要使用默认密码控制器来实现这一点,你可以编写自己的函数来得到相同的结果,例如:
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匹配的旧人,注册规则刚刚进入“应用程序/供应商/ AppServiceProvider.php”,并添加到启动功能的下一行:
Validator::extend('current_password_match', function($attribute, $value, $parameters, $validator) {
return Hash::check($value, Auth::user()->password);
});
现在验证规则有效,但您不会收到错误消息,以添加错误消息你刚刚创建的新规则,你将不得不修改“资源/郎/ EN/validation.php”这些行:
'custom' => [
'current_password' => [
'current_password_match' => 'Current password is incorrect.',
],
],
就是这样,现在你可以使用这个功能更改当前用户的密码:)
如果你想保持你的AppServiceProvider.php文件清理关闭(无论什么原因;我个人喜欢这些小文件整洁),你可以添加执行以下两件事情:
1)增加以下到AppServiceProvider.php的引导()方法
Validator::extend('current_password_match', 'App\Validators\[email protected]');
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类消息()方法,如:
'current_password_match' => 'Current password is incorrect',
看起来很好,所以现在我只需要一个视图与领域的形式current_passoword,new_password和new_password_confirm,并将其提交给该函数,是吗? – nameless
这就是你现在唯一需要做的事情.. –
让它工作,非常感谢你:) – nameless