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

Laravel 5升级至7版本:如何避免现有令牌被撤销?

解决Laravel升级时令牌失效的问题

首先得明确你使用的令牌类型,不同实现方案的处理方式不同,以下分情况说明:

一、如果使用Laravel Passport

Passport的令牌签名/验证依赖独立的密钥对,而非APP_KEY,这是你仅复制APP_KEY仍失效的核心原因。按以下步骤操作:

  • 从旧Laravel 5.8项目中复制storage/oauth-private.key和storage/oauth-public.key到新项目的storage目录,确保文件权限正确(web服务器需具备读取权限)。
  • 不要在新项目执行php artisan passport:install,否则会生成新的密钥对,直接导致旧令牌失效。
  • 完整迁移旧数据库中Passport相关表的数据:oauth_access_tokens、oauth_refresh_tokens、oauth_clients、oauth_personal_access_clients,这些表记录了令牌的关联信息,缺失会导致验证失败。
  • 确保新项目config/passport.php的配置与旧项目完全一致,比如令牌过期时间、加密算法等参数。

二、如果使用传统API Token(用户表api_token字段)

这种令牌验证逻辑相对简单,排查以下几点:

  • 确认旧数据库中用户表的api_token字段数据已完整迁移到新项目数据库,令牌验证依赖该字段的匹配。
  • 检查新项目config/auth.php中的API守卫配置,确保driver为token,且provider对应的用户表、field参数与旧项目一致,示例配置如下:
    'guards' => [
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false, // 5.8默认未启用哈希,7.x需保持一致
        ],
    ],
    
  • 核对config/hashing.php中的加密驱动,新旧项目需统一为bcrypt(Laravel 5.8和7.x默认都是该驱动)。

三、如果使用第三方JWT扩展(如tymon/jwt-auth)

  • 复制旧项目config/jwt.php中的secret配置到新项目,JWT令牌的验证完全依赖该密钥。
  • 确保新旧项目的JWT算法、过期时间等配置一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:12:33