You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel加入password验证规则后密码校验失效是什么原因?

问题原因分析

1. password验证规则的作用

Laravel 提供的password验证规则不是用来校验密码格式合法性的,它的功能是:将用户提交的明文密码,和当前已认证用户存储在数据库中的哈希密码做比对,只有两者匹配时才会验证通过。

2. 校验失败的原因

这个规则有强制的使用前提:当前请求必须有已经完成登录认证的用户实例。
如果你当前是做登录、注册这类未登录状态的表单校验,系统根本拿不到对应用户的哈希密码用来比对,必然会验证失败。哪怕是已登录场景下的校验(比如修改密码时验证旧密码),如果你用了自定义的用户Guard但没有给规则指定Guard参数,也会出现校验失败的问题。

3. 这个规则是不是多余的?

取决于你的业务场景:

  • 如果是注册、登录场景的密码校验:完全多余,直接删掉即可。注册场景只要校验密码长度、格式符合你的要求就行,登录场景的密码正确性校验应该用Auth::attempt()等认证方法完成,不要在表单验证环节做。
  • 如果是修改密码、敏感操作前校验当前用户密码的场景:可以使用,示例用法如下:
// 校验旧密码是否和当前登录用户的密码匹配,web为用户Guard名称,用默认Guard可省略
'old_password' => 'required|min:8|password:web'

调试小技巧

你代码里已经获取了验证错误信息,可以临时打印错误内容快速定位问题:

if ($validator->fails()) {
    // 打印具体错误信息,就能直接看到规则失败的原因
    dd($validator->messages()->first());
    Session::flash('error', $validator->messages()->first());
}

内容的提问来源于stack exchange,提问作者Ruben Kubalyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:09:00