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

Google Workspace Add-on无法获取传递的token及authorizationEventObject

Google Workspace 替代运行时插件无法获取authorizationEventObject排查方案

按以下优先级逐一排查即可:

  • 校验事件类型匹配
    只有eventType字段值为authorizationEvent的请求负载中才会携带authorizationEventObject对象,普通主页加载、上下文触发(Gmail/日历内容触发)的请求本身不包含该字段,不要在非授权事件的回调逻辑里读取该对象。
  • 校验插件触发器配置
    进入Google Workspace SDK配置页、插件部署配置页,确认已显式注册授权事件触发器,且授权事件回调地址配置正确。未注册对应触发器时,Google侧不会在请求中注入该对象,读取结果必然为undefined。
  • 校验后端请求解析逻辑
    Google会将完整事件对象放在POST请求的JSON格式请求体中传递,不会放在query参数、路径参数、请求头里:
    • 如果使用Express等Web框架,必须提前开启JSON请求体解析中间件,否则无法正确读取请求体内容
    • 排查阶段先打印完整原始请求体到日志,确认请求来源是Google官方触发的真实事件,不要用自定义构造的模拟请求直接测试
    • 不要做深层字段的链式读取,先判断上层字段存在再读取子字段,避免因上层字段缺失抛出undefined错误
  • 校验端点拦截规则
    确认你的服务端点没有开启请求拦截(比如强制要求携带自定义鉴权头、跨域拦截),Google发起授权事件请求时不会携带你自定义的鉴权凭证,拦截后你拿到的是拦截器返回的默认空响应,自然读不到目标对象。

正确的事件读取参考代码(Node.js/Express):

const express = require('express')
const app = express()
// 必须配置JSON请求体解析
app.use(express.json())

app.post('/addon/callback', (req, res) => {
  const eventPayload = req.body
  // 先匹配事件类型
  if (eventPayload.eventType === 'authorizationEvent') {
    // 此时读取授权事件对象
    const authEvent = eventPayload.authorizationEventObject
    const userIdToken = authEvent.userIdToken
    // 后续token校验、授权流程逻辑
  }
  // 其他事件类型走对应处理逻辑
})

app.listen(3000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:09:33