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

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时效的诉求)

实现步骤:

  1. 生成控制器
    执行命令创建专属控制器:
    php artisan make:controller Api/TokenController

  2. 编写查询逻辑
    在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
        ]);
    }
}
  1. 注册路由
    在routes/api.php中添加路由配置:
Route::get('/tokens/all', [\App\Http\Controllers\Api\TokenController::class, 'listAllTokens']);

注意事项:

  • 必须为该接口配置严格的权限校验,仅允许平台管理员访问,避免全量令牌数据泄露引发安全问题
  • 可按需追加分页、用户筛选、状态筛选等逻辑适配业务需求
  • 长有效期令牌若设置了expires_at为null,会自动标记为永久有效

内容的提问来源于stack exchange,提问作者Architect - Hitesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:36:03