Node.js后端验证Firebase ID Token后,如何代用户访问Google Sheets API?
解决方案:通过Firebase Auth用户凭证访问Google Sheets API
核心思路
验证Firebase ID Token后,借助用户关联的Google账号OAuth凭证换取访问令牌,以此调用Google Sheets API。以下是具体实现步骤:
1. 前置准备
- 确保用户通过Google账号登录Firebase(非其他登录方式)。
- 在Firebase控制台「身份验证」→「登录方式」中启用Google身份提供商,记录对应的
客户端ID和客户端密钥。 - 在Google Cloud Console的「OAuth同意屏幕」中,添加Google Sheets API权限(如
https://www.googleapis.com/auth/spreadsheets或只读权限https://www.googleapis.com/auth/spreadsheets.readonly)。 - 前端登录时需请求
offline_access权限:在signInWithPopup或signInWithRedirect配置中,给GoogleAuthProvider添加accessType: 'offline'和prompt: 'consent',确保后端能获取用户的refresh_token。
2. Node.js后端实现代码
首先安装依赖:
npm install firebase-admin googleapis
初始化Firebase Admin SDK
const admin = require('firebase-admin'); const { google } = require('googleapis'); // 初始化Firebase Admin(可使用服务账号密钥或默认凭证) admin.initializeApp({ credential: admin.credential.applicationDefault() });
从Firebase用户获取Google访问令牌
async function getGoogleUserAccessToken(uid) { // 获取Firebase用户信息 const firebaseUser = await admin.auth().getUser(uid); // 筛选Google账号的提供商数据 const googleProvider = firebaseUser.providerData.find(p => p.providerId === 'google.com'); if (!googleProvider || !googleProvider.refreshToken) { throw new Error('该用户未通过Google账号登录,或未授予离线访问权限'); } // 配置Google OAuth客户端 const oauthClient = new google.auth.OAuth2( process.env.GOOGLE_CLIENT_ID, // 从Firebase控制台获取 process.env.GOOGLE_CLIENT_SECRET, // 从Firebase控制台获取 'https://<你的项目ID>.firebaseapp.com/__/auth/handler' // Firebase Google登录默认回调URL ); // 用refresh token换取访问令牌 oauthClient.setCredentials({ refresh_token: googleProvider.refreshToken }); const { token } = await oauthClient.getAccessToken(); return token; }
调用Google Sheets API
async function fetchSpreadsheetData(uid, spreadsheetId, range = 'Sheet1!A1:C10') { const accessToken = await getGoogleUserAccessToken(uid); // 初始化Sheets API客户端 const sheetsApi = google.sheets({ version: 'v4', auth: accessToken }); // 读取表格数据(可替换为写入等操作) const response = await sheetsApi.spreadsheets.values.get({ spreadsheetId, range }); return response.data.values || []; }
3. 关键注意事项
- 若用户首次登录未授权
offline_access,需引导其重新登录并通过prompt: 'consent'强制弹出授权框。 - 确保Google Cloud Console中已启用Google Sheets API(在「API和服务」→「库」中搜索启用)。
- 访问令牌有效期为1小时,可通过refresh token自动刷新,无需用户再次授权。
内容的提问来源于stack exchange,提问作者Ruslan Plastun
相关产品推荐
相关产品推荐

