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

使用Inertia手动发起用户更新请求返回403未授权问题排查

Inertia手动发起PUT请求返回403未授权的原因排查

我尝试用Inertia的manual visits发起用户更新请求,根据Inertia官方说明,Laravel会自动为Inertia请求添加CSRF令牌,但请求却返回403: THIS ACTION IS UNAUTHORIZED。相关代码如下:

Index.vue

const saveUser = () => {
    router.put(`users/${user.value}`);
    submitted.value = true;
    createUserDialog.value = false;
    user.value = {};
};

UserController.php

public function update(UserUpdateRequest $request)
{
    $request->user()->fill($request->validated());

    if ($request->user()->isDirty('email')) {
        $request->user()->email_verified_at = null;
    }

    $request->user()->save();

}

web.php

Route::Resource('users', UserController::class)->middleware(['auth', 'verified']);

可能的原因:

  • 路由参数错误:router.put中的user.value大概率不是用户ID,导致路由无法匹配到正确的update资源路由。资源路由的update方法需要传入用户ID(如users/1),如果user.value是空对象或无效值,会触发路由匹配异常,进而返回403。
  • 未携带更新数据:PUT请求需要传递更新的用户数据,但当前代码仅调用router.put传入URL,未携带请求体。正确写法应为router.put(users/${user.id}, { data: user.value }),缺少数据可能导致验证或权限逻辑触发异常。
  • 模型策略权限拦截:如果项目中存在UserPolicy,默认的update策略通常只允许用户修改自身账号。若当前请求是更新其他用户,会被策略拦截返回403。
  • CSRF令牌异常:尽管官方声称自动添加令牌,但仍可能因Inertia中间件配置问题、URL格式错误导致令牌未正确携带。可通过浏览器开发者工具查看请求头,确认是否存在X-XSRF-TOKEN且值有效。
  • 验证请求异常:UserUpdateRequest的验证规则未满足时,默认返回422,但如果项目修改了异常处理逻辑,也可能返回403,可优先排查验证规则是否符合要求。

内容的提问来源于stack exchange,提问作者ahmad kharabsheh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:29:52