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

Laravel/Angular项目中PlayerController内Auth::user()返回null问题排查

问题解决:PlayerController中Auth::user()返回null的原因及修复方案

没错,你必须在调用PlayerController的接口时也携带相同的Bearer认证头,这正是导致Auth::user()返回null的核心原因。我来给你拆解清楚:

为什么会出现这个问题?

Laravel的API认证系统完全依赖请求头里的Authorization: Bearer {token}来识别当前登录用户:

  • 你的UserController接口能正常返回用户数据,是因为前端调用时正确传递了这个认证头,Laravel可以解析token并关联到对应的用户;
  • 但调用PlayerController的getPlayers接口时,前端没有携带这个认证头,Laravel无法识别请求的发起者,自然Auth::user()就返回null了。

具体修复步骤

1. 前端:给Player接口请求添加认证头

直接复用调用User接口时的headers配置,在请求getPlayers接口时带上:

const headers = new HttpHeaders({ Authorization: `Bearer ${localStorage.getItem('token')}` });
this.http.get('http://127.0.0.1:8000/api/players', {headers}).subscribe(result => {
    // 处理返回的玩家数据
});

如果你的前端有很多API请求需要带认证头,更高效的方式是创建一个全局HTTP拦截器,自动给所有API请求添加Authorization头,不用每次手动写:

import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const token = localStorage.getItem('token');
    if (token) {
      const authReq = req.clone({
        headers: req.headers.set('Authorization', `Bearer ${token}`)
      });
      return next.handle(authReq);
    }
    return next.handle(req);
  }
}

记得在AppModule里注册这个拦截器,这样所有请求都会自动带上认证头。

2. 后端:确保Player路由使用API认证中间件

检查你的routes/api.php,确认Player相关路由被包裹在auth:api中间件组里,这样既能保护接口不被未授权访问,也能让Laravel正确加载当前用户:

Route::middleware('auth:api')->group(function () {
    Route::get('/players', [PlayerController::class, 'getPlayers']);
    Route::get('/user', [UserController::class, 'user']);
});

3. 优化getPlayers方法(实现你的需求)

既然你要获取除当前认证用户外的所有用户,可以直接修改方法逻辑:

public function getPlayers(){
    $currentUserId = Auth::id();
    // 排除当前用户,返回其他所有用户
    $players = User::where('id', '!=', $currentUserId)->get();
    return response()->json($players, 200);
}

内容的提问来源于stack exchange,提问作者32quick23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:27:44