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

Laravel Passport部署后如何避免强制用户重新登录?

解决Laravel Passport部署后密钥丢失导致用户重新登录的问题

核心原因

部署过程中storage/oauth-private.key和storage/oauth-public.key这两个Passport核心密钥文件被覆盖或删除,导致旧的Bearer令牌无法被验证,只能重新执行passport:install生成新密钥,但这会使所有现有令牌失效。

解决方案

1. 持久化Passport密钥文件

  • 首次部署完成后,执行passport:install生成密钥,随后将storage/oauth-private.key和storage/oauth-public.key复制到EC2实例上独立于部署包的持久化目录(比如/var/laravel-passport-keys)。
  • 修改Laravel配置文件config/auth.php,指定Passport使用该持久化目录的密钥:
    'passport' => [
        'private_key' => env('PASSPORT_PRIVATE_KEY', '/var/laravel-passport-keys/oauth-private.key'),
        'public_key' => env('PASSPORT_PUBLIC_KEY', '/var/laravel-passport-keys/oauth-public.key'),
    ],
    
  • 在部署脚本中添加逻辑:每次部署前,将持久化目录的密钥文件复制回项目storage目录,或直接让配置指向持久化路径(需确保Web服务器用户拥有该目录的读取权限)。

2. 使用环境变量存储密钥内容

  • 复制已生成的密钥内容:执行cat storage/oauth-private.key获取私钥内容,存入环境变量PASSPORT_PRIVATE_KEY_CONTENT;执行cat storage/oauth-public.key获取公钥内容,存入环境变量PASSPORT_PUBLIC_KEY_CONTENT。
  • 修改config/auth.php配置,直接读取环境变量中的密钥字符串:
    'passport' => [
        'private_key' => env('PASSPORT_PRIVATE_KEY_CONTENT'),
        'public_key' => env('PASSPORT_PUBLIC_KEY_CONTENT'),
    ],
    
    Laravel Passport支持直接传入密钥字符串,无需依赖文件路径,只要环境变量保持不变,部署后密钥就不会失效。

3. 优化部署流程避免覆盖密钥

  • 若用Git部署,将storage/oauth-private.key和storage/oauth-public.key加入.gitignore,防止仓库文件覆盖本地密钥。
  • 若用CI/CD工具(如GitHub Actions、GitLab CI),在部署步骤中添加跳过覆盖这两个文件的逻辑,或先备份再恢复。

注意事项

  • 确保密钥文件权限正确:Web服务器用户(如www-data、apache)需拥有密钥文件的读取权限,避免权限异常。
  • 密钥属于敏感信息,禁止提交到代码仓库,使用AWS Secrets Manager管理密钥比直接存储在EC2环境变量中更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:04:59