在 Laravel 中让 User 模型支持 Passport API Token 认证,需三步协同:安装配置 Passport、在 User 模型中引入 HasApiTokens trait、确保主键兼容;无需为 users 表新增字段,token 存于独立 OAuth 表中。

在 Laravel 中,要让 User 模型支持 Passport 的 API Token 认证,核心是给模型添加 HasApiTokens trait,并确保数据库有对应字段。这不是“加一个方法”那么简单,而是涉及模型、迁移、配置三步协同。
1. 确保已安装并配置 Laravel Passport
先确认你已完成官方安装流程:
- 执行
composer require laravel/passport - 运行
php artisan migrate(Passport 会创建oauth_clients、oauth_access_tokens等表) - 执行
php artisan passport:install生成加密密钥和密码授权客户端 - 在
AuthServiceProvider@boot()中调用Passport::routes() - 在
config/auth.php中将apiguard 的 driver 设为passport
2. 给 User 模型添加 HasApiTokens trait
打开 app/Models/User.php(或你的 User 类路径),引入并使用 trait:
use Laravel\Passport\HasApiTokens;
// ...
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
⚠️ 注意:这个 trait 提供了 createToken()、tokens()、tokenCan() 等关键方法,但**不负责存储 token 到用户表**——token 存在 oauth_access_tokens 表中,与 User 关联靠 user_id 外键。
大模型 Token 成本节约工具。在请求到达大模型之前自动压缩 prompt 和上下文,减少 60-95% 的 token 消耗,直接降低 API 成本。支持 Claude/OpenAI/Gemini 等主流模型,提供代理模式、CLI 包装、Python SDK 和 MCP Server 四种接入方式。内置一键安...
3. 不需要额外字段,但需确保主键兼容
HasApiTokens 不要求你在 users 表里加新字段(比如 api_token)。Passport 使用独立的 OAuth 表管理 token,所以:
- 保持
users.id是整型或 UUID(取决于你是否启用Passport::hashesIds()) - 如果用了 UUID 主键,需在
User模型中设置$keyType = 'string'和$incrementing = false - 无需运行新迁移来加字段——除非你之前手动加过旧版
api_token字段,那建议删掉,避免混淆
4. 验证是否生效
在测试或控制器中尝试创建 token:
$user = User::first();
$token = $user->createToken('test-app')->accessToken;
如果没报错且返回有效字符串,说明 HasApiTokens 已正确集成。后续可通过 Authorization: Bearer xxx 请求受保护接口。
只要 trait 引入正确、Passport 安装无遗漏、路由注册到位,User 就具备完整的 API token 能力。不需要改模型结构,也不需要手写 token 逻辑。

















