Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证/授权Laravel 5.1中的当前密码_Php_Validation_Authorization_Laravel 5.1 - Fatal编程技术网

Php 验证/授权Laravel 5.1中的当前密码

Php 验证/授权Laravel 5.1中的当前密码,php,validation,authorization,laravel-5.1,Php,Validation,Authorization,Laravel 5.1,我正在尝试为我的登录/授权用户添加密码更改功能。这是您的普通ole通用设置: Current Password New Password Confirm New Password 显然,我可以在新密码和密码确认上使用validate,但是如何根据实际的当前密码授权提交的当前密码 在用户模型中,密码是一个隐藏属性,因此我不能只匹配它们 我试着通过Illiminate\Auth和Guard查看,但在任何地方都没有看到它。可能是我错过了,或者是我走错了方向?获取当前密码并与新密码进行比较 //use

我正在尝试为我的登录/授权用户添加密码更改功能。这是您的普通ole通用设置:

Current Password
New Password
Confirm New Password
显然,我可以在新密码和密码确认上使用validate,但是如何根据实际的当前密码授权提交的当前密码

在用户模型中,
密码
是一个隐藏属性,因此我不能只匹配它们


我试着通过
Illiminate\Auth
Guard
查看,但在任何地方都没有看到它。可能是我错过了,或者是我走错了方向?

获取当前密码并与新密码进行比较

//use Auth, Hash, Input;

if (Hash::check(Input::get('new_password'), Auth::user()->password))
        echo "Matched";
else
        echo "Not matched";
您是否使用了laravel内置的身份验证包?如果是,则验证已为您完成。检查app/Http/Controller/Auth/AuthController.php,您可以看到这个验证函数。如果愿意,您可以添加更多!:

protected function validator(array $data)
{
    return Validator::make($data, [
        'first_name' => 'required|max:255',
        'last_name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
    ]);
}
如果在上述验证过程中发生任何错误,它将被发送到$errors变量,您的blade view可以在其中捕获这些错误。因此,在重置密码视图(view/auth/reset.blade.php)中,您可以捕获如下验证错误:

@if (count($errors) > 0)
                        <div class="alert alert-danger">
                            <strong>Whoops!</strong> There were some problems with your input.<br><br>
                            <ul>
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
@endif
@if(计数($errors)>0)
哇您的输入有一些问题。

    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫
如果有人在看,下面是答案:

$validator = $this->validator($request->all());

$validator->after(function($validator) use ($request) {
    $check = auth()->validate([
        'email'    => $this->user->email,
        'password' => $request->current_password
    ]);

    if (!$check):
        $validator->errors()->add('current_password', 
            'Your current password is incorrect, please try again.');
    endif;
});

if ($validator->fails()):
    return redirect('account/password')
        ->withErrors($validator)
        ->withInput();
endif;

$this->user->password = bcrypt($request->password);
$this->user->save();

让我知道我的答案是否是你想要的。奇怪的是,当我开始尝试时,它不起作用。但遗憾的是,这并没有像我希望的那样有帮助,因为我仍然需要编写一个自定义验证器来进行比较。很难相信这不是验证器的一部分。嗨,我已经更新了我的答案。您是否使用了laravel内置的身份验证包?如果是,则不必编写自定义验证器。这是为您完成的,只是您需要在刀片视图中显示该错误。请让我知道这是否是您所寻求的答案,如果您需要更多的澄清,请询问。:)是的,问题中明确指出,这是针对登录用户的。是的,它们是用baked-in-auth系统创建的。这不是为了从baked-in
auth\PasswordController
类重置密码。这已经设置好了,适用于忘记密码的人。这是为那些只想更改密码作为正常安全预防措施的登录用户准备的。然后需要编写自定义验证器,但您可以简单地遵循相同的规则:)是否可以直接在请求中添加这些签入?