一旦用户登录我的应用程序,我想让他们更改密码。我创建了三个输入字段(password_new,password_new_confirmation,password_old)。在我的表单请求中,我有以下规则,但它不起作用:
$rules['password_new'] = 'required|confirmed|min:6';
$rules['password_old'] = 'required|exists:users,password,email,'. Auth::user()->email;
这可能是因为密码输入没有散列,因为存储的密码是散列格式的?
所以我想也许使用auth :: validate facade如下:
$valid = Auth::validate(['email' => Auth::user()->email, 'password' => Input::get('password_old')]);
if ( ! $valid)
{
// add error to validator
}
我的问题是如何将错误添加到我的表单请求中的验证器实例以覆盖它 - 下面是验证器实例?
protected function getValidatorInstance()
{
$factory = $this->container->make(ValidationFactory::class);
if (method_exists($this, 'validator')) {
return $this->container->call([$this, 'validator'], compact('factory'));
}
return $factory->make(
$this->all(), $this->container->call([$this, 'rules']), $this->messages(), $this->attributes()
);
}
当您手动创建验证器时,您可以按如下方式应用后验证挂钩,因此下面如何使用上面的验证实例:
$validator->after(function($validator) {
if (!Auth::validate(['email' => Auth::user()->email, 'password' => $this->input('password_old')) {
$validator->errors()->add('password_old', 'Invalid password');
}
});
答案 0 :(得分:0)
根据您的评论我改变了我的回答。
要通过手动验证检查密码,您可以执行以下操作:
$valid = $this->validate($request,[
'email' => 'required|exists:users,email',
'old_password' => 'required|exists:users,password'
]);
要添加自己的自定义验证消息,请打开此文件:
resources/lang/en/validation.php
找到这些代码:
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
在custom
内,您可以添加自己的验证消息。例如:
'custom' => [
'email' => [
'required' => 'You must give you Email address',
]
'old_password' => [
'exists' => 'Invalid password try again',
],
],
您可以使用:attribute
代替硬编码属性名称。例如:Invalid :attribute try again
或You must give your :attribute address
希望这会有所帮助。
答案 1 :(得分:0)
操作要求使用 laravel 5.1,但对于使用 laravel 6.x 及更高版本的人,添加了密码验证规则。
只需将此规则添加到您的验证规则中:
<块引用>'密码' => '密码'
您还可以指定身份验证保护:
<块引用>'password' => 'password:api'