跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Composer怎么安装Laravel Passport OAuth_Composer如何引入Passport实现OAuth2认证服务【教程】

Passport 报错主因是 MySQL 版本低于 5.7.8 不支持 JSON 字段,需升级或改用 Socialite;Laravel 9+ 废弃 createFreshApiToken,Laravel 10 需用 passport guard 并确保 Authorization 头正确;token client_id 无效需重跑 passport:install;SPA 场景须统一认证方式并配置 CORS credentials。 composer require laravel/passport 后 migrate 报错
SQLSTATE[42000]: Syntax error or access violation
Passport 的数据库迁移依赖 MySQL 5.7.8+ 或 MariaDB 10.2.7+,低版本不支持 JSON 字段类型。你执行
php artisan migrate
时看到这个错误,大概率是 MySQL 版本太老。 实操建议: 先运行
mysql --version
确认版本;若低于 5.7.8,别硬升 Passport,改用
laravel/socialite
做第三方登录更稳妥 若环境可控,升级 MySQL 后,删掉已失败的迁移记录(
php artisan migrate:rollback --step=1
可能不生效,直接清空
migrations
表中失败项) Passport 的
createFreshApiToken
中间件在 Laravel 9+ 已废弃,别照着旧文档配 Laravel 10 中 use TokenGuard 但
Auth::user()
返回 null Passport 默认用
passport
guard,不是
web
api
。你没切对 guard,Auth 就找不到用户。 实操建议: 检查
config/auth.php
'defaults' => ['guard' => 'api']
—— 这里必须是
passport
,不是
api
API 请求头必须带
Authorization: Bearer {token}
,漏空格、多空行、用单引号包 token 都会导致解析失败 Token 过期后不会自动刷新,
Passport::tokensExpireIn()
Passport::refreshTokensExpireIn()
要在
AuthServiceProvider@boot
里显式调用 Passport::personalAccessClientId 配置无效,
createToken()
生成的 token 总是
client_id=1
这是 Laravel 8+ 的坑:Passport 不再读取
.env
里的
PASSPORT_PERSONAL_ACCESS_CLIENT_ID
,而是强制从数据库查
oauth_clients
表中标记为
personal_access_client = 1
的那条记录。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 实操建议: 别改 .env,运行
php artisan passport:install --force
重新生成 client,它会自动设好标记 如果已有 client,手动执行 SQL:
UPDATE oauth_clients SET personal_access_client = 1 WHERE id = X
(X 是你的 personal client ID)
Passport::hashIds(false)
在 Laravel 10.30+ 默认开启,若你用自定义 ID 映射,记得关掉,否则
token->client->id
会是 hash 值而非数字 前端发请求拿到
401 Unauthenticated
,但 Postman 能通 常见于 SPA 场景:Vue/React 发请求时没带 Cookie,或没开
withCredentials: true
,导致 session 无法复用,Passport 回退到 token 解析,而你又没传 Bearer。 实操建议: 确认是否混用了两种认证方式——Web 登录态(session)和 API token(Bearer),它们互不兼容,别指望一个请求同时走两边 如果是 SPA + Laravel API 模式,别用
auth:web
中间件,统一走
auth:passport
,前端所有请求加
Authorization
头 CORS 配置里
supports_credentials
必须为 true,且
allowed_origins
不能写
*
,得填具体域名 Passport 的难点不在装,而在“什么时候该用它”。比如内部微服务通信、纯 API 场景才需要 OAuth2 授权码流;管理后台登录、小程序静默登录,用 Sanctum 更轻、更不容易配错。

相关文章