【问题标题】:Validate/Authorize Current Password In Laravel 5.1在 Laravel 5.1 中验证/授权当前密码
【发布时间】:2015-08-29 17:03:45
【问题描述】:

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

Current Password
New Password
Confirm New Password

显然我可以在新密码和密码确认上使用验证,但是如何根据他们的实际当前密码授权提交的当前密码?

在用户模型中password 是一个隐藏属性,所以我不能只匹配它们。

我尝试查看Illiminate\AuthGuard,但我在任何地方都没有看到。也许我错过了它,或者也许我走错了路?

【问题讨论】:

  • 如果我的答案是您想要的,请告诉我。

标签: php validation authorization laravel-5.1


【解决方案1】:

如果其他人正在寻找,这是答案:

$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();

【讨论】:

  • 是否可以直接在请求中添加这些检查?
【解决方案2】:

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

//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 变量,您的刀片视图可以在其中捕获它们。因此,在您的重置密码视图 (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

【讨论】:

  • 奇怪的是,我最初尝试过它并没有用。但是,唉,这并没有我希望的那么大,因为我仍然需要编写一个自定义验证器来进行比较。很难相信这不是验证器的一部分。
  • 嗨,我已经更新了我的答案。您是否使用了 laravel 内置的身份验证包?如果是,您不必编写自定义验证器。它为您完成,只是您需要在刀片视图中显示该错误。请让我知道这是否是您正在寻找的答案,如果您需要更多说明,请询问。 :)
  • 是的,问题中明确指出这是针对登录用户的。是的,它们是使用经过烘焙的身份验证系统创建的。
  • 这不是从Auth\PasswordController 类中的烘焙重置密码。这已经设置好了,适用于忘记密码的人。这适用于只想更改密码的登录用户,以作为正常的安全预防措施。
  • 好吧,我错过了那个。然后需要编写自定义验证器,但您可以简单地遵循相同的规则:)
猜你喜欢
  • 2016-03-24
  • 2018-08-26
  • 2015-06-24
  • 1970-01-01
  • 2018-11-27
  • 2015-11-30
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多