前端Google登录access token传Node.js后端获取GDrive文件失败如何解决
问题原因
你仅在Google Cloud控制台的OAuth同意屏幕配置了Drive相关scope,但是前端发起谷歌登录授权请求时,没有主动声明需要请求这些Drive权限,因此用户授权时仅同意了邮箱、个人信息等默认基础scope,返回的access token自然不具备Drive API的访问权限,所以后端请求Drive接口失败。
解决方法
- 第一步:修改前端登录按钮的配置,新增
data-scope属性,声明你需要申请的Drive权限。
找到login.ejs里的谷歌登录按钮代码,修改为以下格式,根据你的业务需求选择对应的Drive scope:
常用的Drive scope可以根据需求选择:仅读取文件用<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark" <!-- 按需添加需要的scope,这里以只读Drive文件为例 --> data-scope="email profile https://www.googleapis.com/auth/drive.readonly"> </div>drive.readonly,需要修改/创建文件用drive,仅访问应用自己创建的文件用drive.file。 - 第二步:清除当前账号的已有授权记录,退出登录后重新发起授权。
修改配置后之前的旧授权已经失效,需要重新走登录流程,此时会弹出新的授权申请窗口,用户同意Drive权限申请后,新拿到的access token就会包含对应的scope。 - 第三步(可选优化):后端增加错误捕获逻辑,方便排查问题。
可以给runSample方法加try catch捕获请求异常,打印具体错误信息:const runSample = async(token)=> { try { const drive = google.drive({ version: 'v2', headers: { Authorization: `Bearer ${token}` }, }); const res = await drive.files.list(); console.log(res.data); return res; } catch (err) { console.error('请求Drive API失败:', err.response?.data || err.message) } }
注意事项
如果你的应用使用了Drive全量权限这类敏感scope,需要在Google Cloud控制台完成OAuth应用验证,未验证的应用仅支持你提前添加到测试用户列表的账号登录使用,普通用户登录会触发应用未验证的报错。
内容的提问来源于stack exchange,提问作者gogolah
相关产品推荐
相关产品推荐

