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

Laravel Passport接口调用返回全部用户问题求助

问题分析与修复方案

嘿,我立马就发现问题所在了!你在details()方法里犯了一个很容易忽略的小错误:

问题根源

$request->user()返回的是当前已认证的单个用户模型实例,但你紧接着链式调用了get()方法——这个方法是Laravel查询构造器的方法,作用是执行查询并返回整个用户表的集合(所有用户)。哪怕你前面已经指定了单个用户,get()也会触发一个全新的select * from users查询,这就是为什么你拿到全部用户的原因。

修复后的代码

你只需要把预加载关联的方式改成适合单个模型的写法就行,有两种简洁的方案:

方案1:使用延迟加载(推荐)

已经拿到用户实例后,用load()方法加载关联:

public function details(Request $request) {
    $userData = $request->user()->load('kids', 'hobbies', 'conversations');
    return response()->json(['user' => $userData], $this->successStatus);
}

方案2:使用预加载(需配合first())

如果习惯用with()预加载,要把get()换成first(),确保只返回当前用户:

public function details(Request $request) {
    $userData = $request->user()->with('kids', 'hobbies', 'conversations')->first();
    return response()->json(['user' => $userData], $this->successStatus);
}

额外优化建议

你的login()方法里有两行没必要的代码:

$user->api_token = $success['token'];
$user->save();

Laravel Passport会自动把生成的token存储在自带的oauth_access_tokens表中,不需要手动把token存在用户的api_token字段里,这样做不仅冗余,还可能在token过期/失效后导致用户表数据不一致,建议删掉这两行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:21:34