Laravel中管理员如何获取所有Personal Access Token及其过期时间
Laravel Passport 全量令牌查询解决方案
接口404原因说明
GET /oauth/personal-access-tokens 是Passport专为自带前端管理界面提供的接口,默认不会自动注册到你的项目API路由组中,且该接口原生仅支持返回当前已认证用户的个人令牌,无法查询全平台所有用户的令牌数据。
可选解决方案
方案1:修复官方接口404(仅支持查询当前登录用户令牌)
适用于只需要用户查询自身令牌的场景:
- 确认
app/Providers/AuthServiceProvider.php的boot方法中已调用Passport::routes()完成Passport路由注册 - 请求该接口时必须在请求头中携带当前用户有效的认证令牌,接口仅返回该用户名下未吊销的令牌,无法查看其他用户的令牌数据
方案2:自定义接口查询全平台所有用户令牌(满足查看全部token时效的诉求)
实现步骤:
生成控制器
执行命令创建专属控制器:php artisan make:controller Api/TokenController编写查询逻辑
在app/Http/Controllers/Api/TokenController.php中写入如下代码:
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use Laravel\Passport\Token; class TokenController extends Controller { // 强制API认证,可额外追加管理员权限中间件避免数据泄露 public function __construct() { $this->middleware('auth:api'); // 示例:如果有管理员权限中间件可放开下一行 // $this->middleware('check.admin'); } public function listAllTokens() { $tokens = Token::with(['user' => function($query) { $query->select('id', 'name', 'email'); // 按需返回用户字段 }]) ->select('id', 'user_id', 'name', 'expires_at', 'created_at', 'last_used_at', 'revoked') ->get() ->map(function ($token) { return [ 'token_id' => $token->id, 'token_name' => $token->name, 'user_info' => $token->user, 'is_revoked' => $token->revoked ? '已吊销' : '有效', 'created_time' => $token->created_at->toDateTimeString(), 'expire_time' => empty($token->expires_at) ? '永久有效' : $token->expires_at->toDateTimeString(), 'last_used_time' => empty($token->last_used_at) ? '未使用' : $token->last_used_at->toDateTimeString(), ]; }); return response()->json([ 'status' => 'success', 'data' => $tokens ]); } }
- 注册路由
在routes/api.php中添加路由配置:
Route::get('/tokens/all', [\App\Http\Controllers\Api\TokenController::class, 'listAllTokens']);
注意事项:
- 必须为该接口配置严格的权限校验,仅允许平台管理员访问,避免全量令牌数据泄露引发安全问题
- 可按需追加分页、用户筛选、状态筛选等逻辑适配业务需求
- 长有效期令牌若设置了
expires_at为null,会自动标记为永久有效
内容的提问来源于stack exchange,提问作者Architect - Hitesh
相关产品推荐
相关产品推荐

