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

Laravel用Axios提交评论遇Unauthorized,user.api_token为undefined

解决Axios提交评论时的Unauthorized错误

从你描述的情况来看,问题核心很明确:Vue实例里的user.api_token是undefined,导致Axios请求没带上有效认证令牌,后端因此返回“未授权”错误。下面一步步帮你解决:

1. 确保后端正确传递用户的api_token到前端

你代码里的user: {!! Auth::check...是Laravel Blade模板的写法,首先得保证已登录用户的api_token被完整注入到Vue的user对象中。

修改user的赋值代码,确保输出包含api_token的完整用户对象:

user: {!! Auth::check() ? Auth::user()->toJson() : '{}' !!}

注意:如果你的User模型没有api_token字段,需要先给users表添加这个字段。可以通过迁移实现:

Schema::table('users', function (Blueprint $table) {
    $table->string('api_token', 80)->unique()->nullable()->default(null);
});

执行迁移后,新注册用户会自动生成api_token,老用户可以手动在数据库赋值或通过命令生成。

2. 手动补充api_token(如果自动传递失败)

如果上面的方式还是拿不到api_token,可以单独把api_token传递到前端:

data: {
  comments: {},
  commentBox: '',
  post: {!! $post->toJson() !!},
  user: {
    api_token: "{!! Auth::check() ? Auth::user()->api_token : '' !!}"
  }
}

这样能直接确保user对象里有api_token字段,即使不需要其他用户信息。

3. 在Axios请求中带上认证令牌

拿到有效api_token后,必须通过Authorization请求头传递给后端,有两种方式可选:

方式一:单个请求设置headers

在postComment()方法里,给Axios请求添加headers参数:

postComment() {
  console.log(this.user.api_token); // 现在应该能输出有效的token了
  axios.post('/api/comments', {
    post_id: this.post.id,
    body: this.commentBox
  }, {
    headers: {
      'Authorization': `Bearer ${this.user.api_token}`
    }
  })
  .then(response => {
    // 处理成功逻辑
    this.comments.push(response.data);
    this.commentBox = '';
  })
  .catch(error => {
    console.error(error);
  });
}

方式二:全局设置Axios默认headers

如果应用里有很多需要认证的请求,可以在Vue实例的created钩子中全局设置,避免重复编写headers:

created() {
  if (this.user.api_token) {
    axios.defaults.headers.common['Authorization'] = `Bearer ${this.user.api_token}`;
  }
}

4. 后端路由和中间件检查

最后确认你的评论提交路由是否使用了auth:api中间件,比如在routes/api.php中:

Route::post('/comments', [CommentController::class, 'store'])->middleware('auth:api');

只有这样,后端才会验证请求头中的Bearer令牌是否有效。

内容的提问来源于stack exchange,提问作者Aimen Kaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:00:22