Laravel 5.3 更改密码
Laravel 5.3 Change Password
我正在构建一个 Laravel 5.3 应用程序并使用 laravel (artisan make:auth
) 的 basic auth
。现在,"Forgot Password" 功能可以正常工作,所以如果用户因为不知道密码而无法登录,他可以通过邮件重置密码。但是现在我希望登录的用户也可以更改他们的密码。我找到了 that,但这并没有真正帮助我。我也知道有一个 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 class messages() 方法中,例如:
'current_password_match' => 'Current password is incorrect',
我正在构建一个 Laravel 5.3 应用程序并使用 laravel (artisan make:auth
) 的 basic auth
。现在,"Forgot Password" 功能可以正常工作,所以如果用户因为不知道密码而无法登录,他可以通过邮件重置密码。但是现在我希望登录的用户也可以更改他们的密码。我找到了 that,但这并没有真正帮助我。我也知道有一个 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 class messages() 方法中,例如:
'current_password_match' => 'Current password is incorrect',