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

前端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:
    <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 scope可以根据需求选择:仅读取文件用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:00