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

Laravel Filament面板:如何展示并删除用户访问令牌?

解决Laravel Filament展示用户访问令牌并实现删除操作的问题

问题分析

你当前的代码存在两个核心问题:

  1. Repeater内部字段名错误:tokens.name应改为name,因为Repeater已绑定到tokens关联,内部字段是相对于单个令牌对象的。
  2. 缺少->relationship()方法:未明确告知Filament这是Eloquent关联关系,导致无法正确加载令牌数据。

另外,Laravel默认的访问令牌(Sanctum的PersonalAccessToken)的token字段为哈希存储,无法直接获取原始令牌值,仅能在创建时查看,因此展示时建议只显示末尾部分。

修正后的代码示例

在你的UserResource的form()方法中,替换为以下代码:

use Laravel\Sanctum\PersonalAccessToken;

// ... 其他代码

Forms\Components\Repeater::make('tokens')
    ->relationship() // 关键:绑定到User模型的tokens关联
    ->schema([
        Forms\Components\TextInput::make('name')
            ->label('令牌名称')
            ->disabled(), // 禁用编辑,令牌名称创建后一般无需修改
        Forms\Components\TextInput::make('token')
            ->label('令牌值')
            ->disabled()
            ->formatStateUsing(fn ($state) => $state ? substr($state, -10) : null) // 仅显示令牌最后10位
            ->helperText('完整令牌仅在创建时可见,此处显示末尾10位'),
        Forms\Components\DateTimePicker::make('expires_at')
            ->label('过期时间')
            ->disabled(),
        Forms\Components\TextInput::make('abilities')
            ->label('权限')
            ->disabled()
            ->formatStateUsing(fn ($state) => is_array($state) ? implode(', ', $state) : $state), // 将权限数组转为字符串
    ])
    ->deletable() // 启用删除按钮
    ->collapsible() // 允许折叠单个令牌项,优化界面
    ->columnSpanFull()

确保User模型关联正确

确认你的User模型中已定义与PersonalAccessToken的关联:

// app/Models/User.php
use Laravel\Sanctum\HasApiTokens;
use Laravel\Sanctum\PersonalAccessToken;

class User extends Authenticatable
{
    use HasApiTokens; // 引入Sanctum的Trait

    // ... 其他代码

    // 明确关联PersonalAccessToken模型(可选,若默认关联正常可省略)
    public function tokens()
    {
        return $this->hasMany(PersonalAccessToken::class);
    }
}

额外说明

  • 删除操作:Repeater的->deletable()会自动生成删除按钮,点击后会从数据库中删除对应的令牌记录。
  • 令牌值显示:由于数据库中存储的是哈希后的令牌,无法恢复原始值,所以只展示末尾部分是安全且合理的做法。

内容的提问来源于stack exchange,提问作者m.abdalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:20:16