重写重置密码表单验证规则后,表单验证有错误

重写重置密码表单验证规则,代码如下:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;

class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    protected $redirectTo = '/';

    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|min:6',
        ];
    }
}

这里只是简单的将最少字符数由8改为了6

错误如下:
重写重置密码表单验证规则后,表单验证有错误

提交数据:
重写重置密码表单验证规则后,表单验证有错误

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

@冷无缺 找了好久的源码,终于发现了问题.不是你编码的问题,在laravel 5.8 的升级日志中有一条:

默认密码长度改变

影响可能性:低

选择或重置密码时所需的密码长度 更改为至少八个字符 。

关键的是在 Illuminate\Auth\Passwords\PasswordBroker.php中 有一个validatePasswordWithDefaults的方法对密码长度进行了判断

/**
     * Determine if the passwords are valid for the request.
     *
     * @param  array  $credentials
     * @return bool
     */
    protected function validatePasswordWithDefaults(array $credentials)
    {
        [$password, $confirm] = [
            $credentials['password'],
            $credentials['password_confirmation'],
        ];

        return $password === $confirm && mb_strlen($password) >= 8;
    }

因此,要实现密码长度小于8,比较麻烦,需要复写此方法.

参考资料:https://github.com/laravel/framework/issue...

4年前 评论
讨论数量: 3
 protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:6',
        ];
    }

你是不是改过前端的表单了,密码的报错信息怎么会在 email 框的下面

file

4年前 评论
冷无缺

@ishu 这也是我纳闷的地方,前端表单没有修改。不重写验证规则,错误提示没问题,重写验证规则后,就出现这个问题了。

前端表单代码:
Laravel

4年前 评论
ishu 4年前
冷无缺 (作者) (楼主) 4年前

@冷无缺 找了好久的源码,终于发现了问题.不是你编码的问题,在laravel 5.8 的升级日志中有一条:

默认密码长度改变

影响可能性:低

选择或重置密码时所需的密码长度 更改为至少八个字符 。

关键的是在 Illuminate\Auth\Passwords\PasswordBroker.php中 有一个validatePasswordWithDefaults的方法对密码长度进行了判断

/**
     * Determine if the passwords are valid for the request.
     *
     * @param  array  $credentials
     * @return bool
     */
    protected function validatePasswordWithDefaults(array $credentials)
    {
        [$password, $confirm] = [
            $credentials['password'],
            $credentials['password_confirmation'],
        ];

        return $password === $confirm && mb_strlen($password) >= 8;
    }

因此,要实现密码长度小于8,比较麻烦,需要复写此方法.

参考资料:https://github.com/laravel/framework/issue...

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!