【问题标题】: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)
        ]);
    

    【讨论】:

      【解决方案2】:

      (Laravel v7.x) 您正在寻找名为“密码”的规则:

      ...
      
      'old_password' => 'password',
      ...
      

      您也可以使用规则的第一个参数指定身份验证保护,如下所示:

      ...
      'old_password' => 'password|web',
      ...
      

      这里是文档: https://laravel.com/docs/7.x/validation#rule-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_passwordnew_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 =&gt; same:password 规则相同的功能:

          public function rules()
          {
              return [
                  'old_password'              => 'required',
                  'password'                  => 'required|min:6|confirmed',
              ];
          }
          

          对于您想要实现的目标,您可以create your own validation rule 或(我认为更好)检查控制器中输入的密码是否正确。

          【讨论】:

            猜你喜欢
            • 2019-09-05
            • 1970-01-01
            • 1970-01-01
            • 2015-06-24
            • 2017-04-27
            • 2019-10-02
            • 2018-11-27
            • 1970-01-01
            • 2018-10-20
            相关资源
            最近更新 更多