Laravel使用nao-pon/flysystem-google-drive包Google Drive刷新令牌过期求助
解决Laravel集成nao-pon/flysystem-google-drive刷新令牌过期问题
问题根因
Google OAuth 2.0 规则限制:OAuth同意屏幕处于测试状态的项目,无论用户类型选内部还是外部,所有生成的刷新令牌默认有效期只有7天,到期自动失效。
解决方案
方案1:使用Google Workspace内部应用(推荐,配置最简单)
- 进入Google Cloud对应项目的「API和服务」-「OAuth同意屏幕」页面,确认用户类型已选择内部(仅支持Google Workspace组织账号,个人Google账号无该选项)
- 将应用状态从「测试」调整为「已发布」,内部应用发布无需Google官方审核,提交后立即生效
- 删除旧的OAuth 2.0客户端凭据,重新创建新凭据,重新走
nao-pon/flysystem-google-drive的授权流程获取新的刷新令牌,替换Laravel.env文件中的GOOGLE_DRIVE_REFRESH_TOKEN参数即可,新刷新令牌无7天过期限制。
方案2:使用服务账号授权(无过期问题,适配所有场景)
如果没有Google Workspace账号,可改用服务账号方案完全避免刷新令牌过期问题:
- 在Google Cloud控制台「IAM与管理」-「服务账号」页面创建新服务账号,生成JSON格式的密钥文件,存入Laravel项目的
storage/app目录下 - 打开你要操作的Google Drive文件夹,共享给服务账号对应的邮箱地址,授予编辑权限
- 修改
config/filesystems.php中google drive的配置,移除原有的client_id、client_secret、refresh_token相关配置,新增服务账号配置:
'google' => [ 'driver' => 'google', 'service_account' => storage_path('app/你的服务账号密钥文件名.json'), 'root' => '你的Google Drive文件夹ID', ],
该方案无需定期更新授权信息,只要服务账号密钥和文件夹权限不变,即可长期正常使用。
内容的提问来源于stack exchange,提问作者Mcodex Files
相关产品推荐
相关产品推荐

