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

如何在Firebase云函数(Node.js)中使用@googleapis/oauth2创建OAuth2Client

解决Node.js Firebase云函数中@googleapis/oauth2子包的OAuth2构造函数调用错误

你的问题出在对@googleapis/oauth2子包的导出结构理解有误——这个子包主要用于调用OAuth2相关的API(比如获取用户信息、令牌校验等),并不直接导出OAuth2客户端构造函数。原来完整googleapis包中的google.auth.OAuth2实际上来自google-auth-library包,完整包只是将其重新导出了而已。

正确的两种解决方式:

方式一:仅用OAuth2客户端(推荐,更轻量化)

如果你的代码只需要OAuth2客户端来处理认证(设置凭据、获取令牌等),不需要调用OAuth2的API接口,直接安装google-auth-library即可:

  1. 安装依赖:
npm install google-auth-library
  1. 修改代码:
const { OAuth2Client } = require('google-auth-library');

const oAuth2Client = new OAuth2Client(
  CLIENT_ID,
  CLIENT_SECRET,
  REDIRECT_URI
);

oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });
// 后续操作不变

方式二:同时使用@googleapis/oauth2 API和OAuth2客户端

如果你的代码除了认证,还需要调用OAuth2的API(比如获取用户资料),则需要同时安装两个包:

  1. 安装依赖:
npm install @googleapis/oauth2 google-auth-library
  1. 代码示例:
const { OAuth2Client } = require('google-auth-library');
const oauth2 = require('@googleapis/oauth2');

// 初始化OAuth2客户端
const oAuth2Client = new OAuth2Client(
  CLIENT_ID,
  CLIENT_SECRET,
  REDIRECT_URI
);
oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });

// 使用@googleapis/oauth2调用API示例
const authClient = oauth2.oauth2({
  auth: oAuth2Client
});

// 比如获取用户信息
async function getUserInfo() {
  const res = await authClient.userinfo.get();
  console.log(res.data);
}
getUserInfo();

为什么之前的写法报错?

  • const { OAuth2 } = require('@googleapis/oauth2'):子包没有直接导出名为OAuth2的构造函数,所以解构得到的是undefined,自然无法作为构造函数调用。
  • OAuth2.auth.OAuth2或OAuth2.OAuth2:因为OAuth2本身是undefined,所以访问其属性会抛出“Cannot read properties of undefined”的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:52:41