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

React+Devise+Axios更新密码时出现ActionController路由错误求助

问题解决:React+Devise更新密码成功但终端报路由错误

你遇到的情况是密码更新逻辑正常,但终端反复出现ActionController::RoutingError (No route matches [PUT] "/"),核心原因是除了/users/password的请求外,页面里还有其他请求意外指向了根路径/,以下是具体排查和解决步骤:

1. 阻止表单默认提交行为

如果onFinish是表单组件(比如Ant Design Form)的提交回调,表单默认的提交行为会触发浏览器向当前页面路径(通常是/)发送请求,这是最常见的原因。修改代码:

const onFinish = (values, e) => {
    e.preventDefault(); // 阻止默认表单提交
    setLoading(true);
    const session = { "user": { ...values, reset_password_token: params.get("reset_password_token") } }
    const path = "/users/password"
    setAxiosHeaders();
    axios.put(path, session)
        .then((response) => {
            console.log(response.data)
        })
        .catch((error) => {
            console.log(error);
        })
}

2. 检查setAxiosHeaders函数

查看这个设置请求头的函数,是否错误修改了Axios的全局配置,比如误将baseURL设为"/",导致后续某些请求的路径拼接错误:

// 错误示例:不要这样设置
axios.defaults.baseURL = "/";
// 正确应该是保持baseURL为空或者设为你的API根路径,比如"/api"

3. 排查页面其他请求

打开浏览器开发者工具的Network面板,筛选所有请求,看是否有额外的PUT/PATCH请求指向/,可能是:

  • 其他组件的Axios请求路径写错(比如漏写了具体路径)
  • 静态资源(图片、样式、脚本)的路径配置错误,导致浏览器请求/
  • 第三方插件或工具发起的额外请求

4. 确认Devise路由(可选)

虽然密码更新成功,但可以通过终端运行rails routes | grep password确认路由是否正确,正常输出应该包含:

PUT    /users/password(.:format)       devise/passwords#update
PATCH  /users/password(.:format)       devise/passwords#update

内容的提问来源于stack exchange,提问作者mutebi godfrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:10