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

Laravel Passport 生产环境CD部署后已登录用户被强制登出如何解决?

问题根因

该问题和你测试过的file、redis会话驱动无关,Passport API鉴权逻辑不依赖会话存储,核心触发原因基本为以下三类:

  • CD部署流程中执行了php artisan passport:install命令,每次生成新的公私钥,导致之前签发的令牌验签全部失败
  • 生产环境Passport公私钥未固化,每次部署后新实例无法读取到上一版本使用的密钥文件
  • 部署流程意外重置了APP_KEY或清空了存储有效令牌的持久化介质(数据库、Redis等)
解决方案

1. 固化Passport公私钥,移除部署流程中的密钥生成逻辑

这是最常见的问题触发点,修复方式如下:

  • 首次部署时仅生成一次Passport公私钥,默认生成的密钥文件为storage/oauth-private.key和storage/oauth-public.key,不要将这两个文件提交到代码仓库,存入生产环境私密配置管理系统即可
  • 删掉CD部署脚本中的php artisan passport:install执行逻辑,部署时直接从配置管理系统将预生成的固定密钥写入到项目storage/对应路径
  • 不想维护实体密钥文件的话,可直接通过.env环境变量注入密钥,Passport 9原生支持该配置:
    PASSPORT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
    替换为你自己生成的私钥完整内容
    -----END RSA PRIVATE KEY-----"
    PASSPORT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
    替换为你自己生成的公钥完整内容
    -----END PUBLIC KEY-----"
    
  • 多实例部署场景下必须保证所有实例使用同一套公私钥,避免跨实例验签失败

2. 固化生产环境APP_KEY

Laravel的APP_KEY用于加密包括Passport敏感字段在内的所有核心加密数据,若CD脚本中执行了php artisan key:generate会重置该值,直接导致已有令牌解析失败。需要移除部署流程中的key:generate执行逻辑,固定生产环境APP_KEY值。

3. 校验令牌存储的持久化逻辑

  • 如果使用Passport默认的数据库存储令牌方案,确保部署流程不会清空oauth_access_tokens、oauth_refresh_tokens等关联表数据
  • 如果使用自定义令牌存储方案,确保存储介质和部署流程完全隔离,不会因部署触发批量数据清理

内容的提问来源于stack exchange,提问作者Faramarz Qoshchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:18:03