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

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

<?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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@冷无缺 找了好久的源码,终于发现了问题.不是你编码的问题,在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年前 评论

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