如何在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即可:
- 安装依赖:
npm install google-auth-library
- 修改代码:
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(比如获取用户资料),则需要同时安装两个包:
- 安装依赖:
npm install @googleapis/oauth2 google-auth-library
- 代码示例:
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
相关产品推荐
相关产品推荐

