Laravel+React重置密码返回422密码确认不匹配错误
问题根因
422密码确认不匹配报错和你输入的密码内容无关,是前端提交请求时参数名拼写错误导致后端未接收到密码确认字段,触发Laravel的confirmed校验规则失败。
你前端构造FormData的代码里,确认密码字段少写了一个字母s:
// 错误代码:password拼成了pasword formData.append('pasword_confirmation', password_confirmation);
Laravel的confirmed校验规则逻辑是:被校验的password字段,必须配套存在名为password_confirmation的同值字段,只要该字段缺失、值不匹配都会抛出你遇到的报错。你这里字段名拼错,后端相当于完全没收到确认密码参数,自然判定校验不通过。
修复步骤
- 修正前端参数拼写错误,将错误的append语句替换为:
formData.append('password_confirmation', password_confirmation);
- 可选优化:当前场景不需要使用FormData传参,直接传递JSON对象更简洁,axios会自动适配请求头,修改后的提交逻辑参考:
const login = (e) => { e.preventDefault(); axios.post(`${API_ENDPOINT}/api/reset-password`, { email, password, token, password_confirmation }).then(res => { // 补充你的成功回调逻辑 console.log(res.data) }) }
排查这类参数校验问题时,可以先在Laravel方法里打印
$request->all()查看实际接收到的参数,能快速定位字段缺失、命名错误类问题。
内容的提问来源于stack exchange,提问作者syrine bh
相关产品推荐
相关产品推荐

