【问题标题】:How can I validate current password in the laravel 5.6如何在 laravel 5.6 中验证当前密码
【发布时间】:2018-08-26 04:44:34
【问题描述】:
我尝试这样:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ChangePasswordRequest extends FormRequest
{
...
public function rules()
{
return [
'old_password' => 'required|confirmed',
'password' => 'required|min:6',
'password_confirmation' => 'required|min:6|same:password'
];
}
}
我已正确输入旧密码,但仍有提示:
旧密码确认不匹配。
我该如何解决这个问题?
【问题讨论】:
标签:
laravel
validation
required
change-password
laravel-5.6
【解决方案1】:
你能做的就是制定规则。以下可能会解决您的问题。
CurrentPassword.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Hash;
class CurrentPassword implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return Hash::check($value,auth()->user()->password);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Current password is incorrect';
}
}
在你的控制器中,你可以做这样的事情:
$this->validate($request,[
'password_current'=>['required',new CurrentPassword()],
'password'=>'required|string|min:6|confirmed',
]);
$request->user()->update([
'password'=>bcrypt($request->password)
]);
【解决方案3】:
根据documentation:
Hash::check()功能,可以检查用户输入的旧密码是否正确。
if (Hash::check("parameter1", "parameter2")) {
//add logic here
}
parameter1 - user password that has been entered on the form
parameter2 - old password hash stored in a database
如果旧密码输入正确,它将返回true,您可以相应地添加您的逻辑
new_password 和 new_confirm_password 相同,您可以像这样在表单请求中添加验证:
'new_password' => 'required',
'new_confirm_password' => 'required|same:new_password'
【解决方案4】:
"confirmed" rule 并没有按照您的预期做。
如果您在字段old_password 上设置confirmed 规则,它将查找表单输入old_password_confirmation 并检查其值是否等于old_password 的值。它基本上是带有预定义预期名称的 same:field 的倒数(它会将 _confirmation 添加到原始名称中)。
在您的情况下,您可以像这样使用它,它将执行与您当前的 password_confirmation => same:password 规则相同的功能:
public function rules()
{
return [
'old_password' => 'required',
'password' => 'required|min:6|confirmed',
];
}
对于您想要实现的目标,您可以create your own validation rule 或(我认为更好)检查控制器中输入的密码是否正确。