Node.js调用Google Drive API报Missing required parameter: refresh_token如何解决
报错排查与解决方案
该错误本质是Google OAuth2授权凭证中缺少refresh_token参数:Google API返回的access_token默认有效期仅1小时,过期后必须用refresh_token换取新的有效凭证,缺少该参数就会触发invalid_request报错。
排查步骤
- 先检查本地存储的授权凭证文件(官方教程默认生成
token.json),打开确认是否存在refresh_token字段,90%的场景是该文件内确实无此字段。 - 确认你在Google Cloud后台创建OAuth同意屏幕时的发布状态,如果是测试模式,不仅授权凭证有效期只有7天,多次授权也可能出现无法下发
refresh_token的问题。 - 检查初始化OAuth2客户端、生成授权链接的代码,是否添加了
access_type: 'offline'参数:这是Google返回refresh_token的必要前置条件,如果你修改过官方默认的初始化代码,很可能误删了该参数。 - 检查是否添加了
prompt: 'consent'参数:如果你的账号之前已经完成过一次授权,Google默认不会重复返回refresh_token,只有加该参数强制重新触发授权同意流程,才会重新下发refresh_token。
解决步骤
- 先删除本地已经生成的
token.json文件,清空历史无效授权凭证。 - 修改生成授权URL的代码,确保包含以下两个必要参数:
const authUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', // 必填,用于获取refresh_token prompt: 'consent', // 必填,强制弹出授权页,确保返回refresh_token scope: SCOPES // 保留你原本的权限范围配置即可 });
- 重新运行Node.js程序,打开终端输出的授权链接,用目标Google账号重新走授权流程,将拿到的授权码回填到终端。
- 新的
token.json生成后打开校验,确认已经存在refresh_token字段,再运行listFiles函数即可正常调用。
注意:如果你的应用需要长期使用,需要把Google Cloud后台OAuth同意屏幕的发布状态从「测试」改为「正式」,否则测试模式下的
refresh_token7天就会过期,需要重复授权。
内容的提问来源于stack exchange,提问作者Oussama Abouzid
相关产品推荐
相关产品推荐

