Google Cloud Functions调用Analytics用户删除API报401如何解决
401错误是因为你发送给Google Analytics API的请求没有携带有效的OAuth2访问令牌。你之前创建的网页类型OAuth客户端不适用于云函数这种无用户交互的服务端场景,应该使用云函数自带的服务账号完成身份验证,操作步骤如下:
第一步:给云函数服务账号授权GA权限
找到你的云函数使用的运行时服务账号,默认是[你的GCP项目ID]@appspot.gserviceaccount.com,你可以在云函数详情页的「运行时、构建、连接设置」标签下找到对应账号。进入Google Analytics管理后台,在对应的媒体资源的「账号访问权限管理」中,给该服务账号授予编辑权限。第二步:修改云函数代码,自动获取访问令牌
首先在云函数的package.json依赖中添加官方认证库,执行安装命令:npm install google-auth-library
修改后的代码参考:
const { GoogleAuth } = require('google-auth-library'); const request = require('request'); // 初始化认证实例,指定GA用户删除API需要的权限范围 const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/analytics.user.deletion' }); async function deleteGArecord(userObject) { // 自动获取当前服务账号的访问令牌,无需手动上传密钥 const client = await auth.getClient(); const accessToken = await client.getAccessToken(); const options = { method: "POST", url: "https://www.googleapis.com/analytics/v3/userDeletion/userDeletionRequests:upsert", headers: { "Content-Type": "application/json", // 把令牌添加到请求头完成身份校验 "Authorization": `Bearer ${accessToken.token}` }, body: JSON.stringify({ kind: "analytics#userDeletionRequest", id: { type: "CLIENT_ID", userId: userObject.clientId, }, webPropertyId: "UA-111111-000", // 替换为你真实的UA媒体资源ID }), }; request(options, function (error, response) { if (error) { console.log(error); } console.log("ga user delete request:" + JSON.stringify(response)); }); }
如果修改后仍有权限报错,可检查云函数的运行时服务账号是否被授予了正确的GA权限,以及填写的webPropertyId是否和你授权的媒体资源ID匹配。
内容的提问来源于stack exchange,提问作者Caio César P. Ricciuti
相关产品推荐
相关产品推荐

