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

Google Slide授权访问限制:Apps Script触发与跳转问题求助

解决Google Slides IP访问限制的两个核心问题

问题1:doGet函数无法触发的根本原因

你混淆了Google Apps Script绑定脚本和Web App部署的运行场景:

  • doGet(e) 是专为部署为Web应用的脚本设计的入口函数,只有当用户访问Web App的专属URL时才会执行,直接写在绑定到Google Slides的脚本里,打开Slides时完全不会触发。
  • Slides自带的onOpen(e)触发函数也不适用:它是简单触发,在用户打开Slides时仅在客户端执行,且无法调用UrlFetchApp这类需要OAuth授权的服务,根本没法完成IP检测逻辑。

问题2:重定向无效的原因

你的重定向代码是针对Web App场景设计的,但如果直接在Slides上下文里执行,会被浏览器的同源策略拦截——Slides的页面属于docs.google.com域名,你的脚本没有权限修改顶级窗口的跳转地址。此外,你之前调用外部API获取的是Google服务器的IP,而非访问者的真实IP,这也是核心逻辑漏洞。

正确实现方案

要实现IP白名单限制,必须通过Web App中间层来管控访问入口:

步骤1:发布Slides为Web页面

打开你的Google Slides,点击「文件 > 发布到Web」,选择链接模式,复制生成的公开访问URL。

步骤2:修改脚本并部署为Web App

使用以下修正后的脚本替换原有代码:

function doGet(e) {
  // 获取访问者的真实IP(从Web App请求参数直接提取,无需外部API)
  var visitorIp = e.request.remoteAddr;
  
  // 定义IP白名单
  const ipWhitelist = ["10.10.10.1", "10.10.10.2", "10.10.10.3"];
  
  if (ipWhitelist.includes(visitorIp)) {
    // IP在白名单内,重定向到Slides的Web发布地址
    return HtmlService.createHtmlOutput(`
      <meta http-equiv="refresh" content="0; url='你的Slides发布URL'">
    `);
  } else {
    // IP不在白名单,重定向到指定页面
    return HtmlService.createHtmlOutput(`
      <meta http-equiv="refresh" content="0; url='https://example.com'">
    `);
  }
}

步骤3:部署Web App

  1. 在脚本编辑器中点击「部署 > 新部署」。
  2. 选择「类型 > Web应用」。
  3. 设置:
    • 执行权限:选择「以我自己的身份执行」(确保IP检测逻辑稳定)。
    • 谁可以访问:根据需求选择(如「任何人,甚至匿名」,但需确认白名单的安全性)。
  4. 点击部署,复制生成的Web App URL,这就是用户的唯一访问入口。

关键注意事项

  • 禁止用外部API获取IP:e.request.remoteAddr才是获取访问者真实IP的正确方式,之前调用ipify得到的是Google服务器的IP,完全无效。
  • 必须通过Web App访问:让所有用户访问Web App的URL,而非直接打开Slides文件,否则IP限制逻辑不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:40:37