Wasp 官网隐私政策与数据收集实践:从 Cookie 同意机制到 PostHog 分析的完整解析
【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp
导读
本文以 Wasp 仓库中官网(wasp.sh)的 隐私政策文档 为骨架,逐节解析 Wasp Inc. 收集哪些数据、如何收集、如何存储与保护,并将政策条款与仓库内真实的实现源码(Cookie 同意横幅、PostHog 分析脚本、脚本按需加载机制)一一对应,帮助你既理解这份 GDPR 风格隐私政策的法律语义,也看清其背后「隐私条款 → 前端实现 → 数据链路」的工程全貌。
一、隐私政策概览:文档定位与适用前提
该文档位于web/src/pages/privacy-policy.md,是 Wasp Inc. 官网(https://wasp.sh)对外公开的正式隐私政策页面。其 frontmatter 声明了页面元信息:
title: Privacy Policydescription: Privacy Policy for Wasp Inc.hide_table_of_contents: true(隐藏目录侧边栏,保持页面简洁)
政策本身由 Wasp Inc.("we"/"our"/"us")发布,最近更新时间为2026-01-13,适用范围限定于访问 wasp.sh 网站的用户行为。文中明确写道:「如果您不同意本隐私政策的条款,请勿访问本网站」,这是典型的 GDPR 合规文案结构(政策末尾也注明其基于 GDPR.eu 提供的隐私通知模板撰写)。
从工程角度看,这份政策并非孤立的法律文本——它描述的每一项数据实践(Cookie、分析工具、第三方服务)都能在仓库的web/站点源码中找到对应实现,本文后续章节将逐项建立「条款 ↔ 代码」的对应关系。
二、数据收集:收集什么、如何收集
2.1 收集的数据类型
政策声明 Wasp Inc. 收集以下四类个人数据:
| 数据类型 | 说明 |
|---|---|
| IP 地址 | 用于定位访问来源与基本网络信息 |
| 浏览器类型 | 识别用户使用的浏览器与客户端环境 |
| 访问页面 | 记录用户访问了站点的哪些页面 |
| 页面停留时间 | 衡量用户在页面上的停留时长 |
这四类数据共同构成了网站流量分析的基础指标,属于典型的「访问分析型」数据集合,不包含姓名、邮箱等主动提交的身份信息。
2.2 收集方式
政策指出,用户通过浏览器 Cookie直接提供了大部分数据——当用户使用或浏览网站时,数据经由 Cookie 被采集。也就是说,该站点采用「默认被动埋点 + 用户主动访问触发」的方式采集上述匿名化程度较高的行为数据。
三、数据的使用与第三方服务
3.1 使用目的
收集到的数据仅用于三个目的:
- 分析网站流量(Analyze website traffic)
- 改进网站体验(Improve our website)
- 理解访客如何使用站点(Understand how visitors use our site)
3.2 第三方服务:PostHog
政策明确列出的第三方服务是PostHog(产品分析平台)。政策强调:
- 第三方服务商拥有各自的隐私政策,用户应自行查阅;
- Wasp Inc. 仅在「提供服务所必需」的范围内与第三方共享信息;
- 第三方有义务对信息保密并确保安全。
源码印证:PostHog 的实际接入位于 web/static/scripts/posthog.js。该文件是 PostHog 官方加载器的压缩版(含posthog.init桩方法注册),并在文件末尾以项目密钥完成初始化:
posthog.init("CdDd2A0jKTI2vFAsrI9JWm3MqpOcgHz1bMyogAcwsE4", { api_host: "https://us.i.posthog.com", person_profiles: "identified_only", });两个关键配置值得注意:
api_host指向 PostHog 的 US 数据节点(us.i.posthog.com),即采集数据发送到该地址;person_profiles: "identified_only"意味着 PostHog只为已识别(identified)的用户创建人物档案,匿名访客的页面浏览不会自动生成可关联的个人画像——这与政策中「仅收集 IP、浏览器类型、访问页面、停留时间」的轻量采集口径是自洽的。
3.3 站点脚本加载的整体编排
在 web/docusaurus.config.ts 中,可以看到生产环境(prodOnlyScripts)的两类分析脚本及其不同的同意策略:
| 脚本 | 来源 | requiresConsent | 原因 |
|---|---|---|---|
| Plausible 代理脚本 | /waspara/wasp/script.js(经 Cloudflare Workers 代理) | false | 注释明确说明 Plausible 不使用 Cookie,因此可立即加载 |
| PostHog 脚本 | /scripts/posthog.js | true | 涉及 Cookie 采集,须等待用户同意后才加载 |
实现上,mapToDocusaurusScripts会对需要同意的脚本设置自定义type属性(text/javascript+requires-consent),使其默认不被浏览器自动执行:
// Scripts requiring consent shouldn't be loaded until the cookies are accepted, // so we use a custom type on the script _not to load it_ automatically. // Later, if cookies are accepted, the script will be loaded by the // `src/components/CookieConsentBanner.tsx` component. ...(requiresConsent ? { type: SCRIPT_WITH_CONSENT_TYPE } : {}),这也解释了隐私政策中「我们通过 Cookie 收集数据」的具体机制:只有用户接受 Cookie 后,PostHog 埋点脚本才会被真正加载并开始采集。
四、Cookie 同意机制:从条款到源码
4.1 同意横幅组件
政策要求用户知情同意,其落地实现是 web/src/components/CookieConsentBanner.tsx。该组件基于react-cookie-consent库构建,提供:
- Accept all / Reject all两个按钮(
enableDeclineButton开启拒绝选项); - 明确的说明文案:"We use cookies primarily for analytics to enhance your experience...",并链接到
/privacy-policy页面供用户进一步了解; - 自定义 Cookie 名称:
wasp-cookies-consent。
4.2 同意状态驱动的脚本加载
组件核心逻辑是一个loadScripts函数与useEffect的组合:
const CONSENT_COOKIE_NAME = "wasp-cookies-consent"; useEffect(() => { if (Cookies.get(CONSENT_COOKIE_NAME) === "true") { loadScripts(); } }, []);当用户点击接受(onAccept={loadScripts})或此前已同意(Cookie 值为"true")时,loadScripts会遍历页面中所有type="text/javascript+requires-consent"的脚本标签,通过「移除节点 → 将 type 改为text/javascript→ 重新挂载」的方式触发浏览器执行:
function loadScripts() { document .querySelectorAll(`script[type="${SCRIPT_WITH_CONSENT_TYPE}"]`) .forEach((el) => { // We need to reattach the element so that the browser picks up the new `type`. const parent = el.parentNode; parent.removeChild(el); el.setAttribute("type", "text/javascript"); parent.appendChild(el); }); }自定义脚本类型常量定义在 web/src/lib/cookie-consent.ts:
export const SCRIPT_WITH_CONSENT_TYPE = "text/javascript+requires-consent";4.3 拒绝后的行为
如果用户选择Reject all,则wasp-cookies-consent不会被置为"true",PostHog 脚本始终保持text/javascript+requires-consent类型而永不执行,从而做到「零分析埋点」。这正对应政策中用户可管理 Cookie 偏好的承诺。
五、数据存储与安全
政策在「数据如何存储」一节声明了两层保障:
- 安全措施:
- SSL/TLS 加密(传输层加密,保护数据在浏览器与服务器之间传输);
- 安全云基础设施(托管层面的防护)。
- 数据保留:个人数据仅保留「实现本政策所述目的所必需」的时长;期限届满后,数据将被安全删除。
需要说明的是,政策对具体的保留周期(如多少天、多少个月)未作硬性数字承诺,而是以「目的达成即删除」的原则性表述为主——这也是 GDPR 框架下常见的做法。
六、营销与选择退出
政策声明 Wasp Inc. 希望向用户发送其可能感兴趣的产品与服务信息,但强调:
- 用户有权在任何时候停止接收营销联系;
- 若用户此前同意接收营销,可随时选择退出;
- 退出或咨询途径:发送邮件至
info@wasp-lang.dev。
这一节体现了「同意可撤销」原则:即便营销沟通基于用户同意,该同意也可以被随时撤回,且撤回方式透明(一个联系邮箱即可)。
七、数据保护权利:GDPR 六大权利详解
政策明确赋予每位用户以下六项数据保护权利,全部源自 GDPR(欧盟《通用数据保护条例》)的框架:
| 权利 | 内容 |
|---|---|
| 访问权(Access) | 请求获取个人数据的副本,服务方可能收取少量费用 |
| 更正权(Rectification) | 请求纠正不准确的信息,或补全不完整的信息 |
| 删除权(Erasure) | 在特定条件下请求删除个人数据 |
| 限制处理权(Restrict processing) | 在特定条件下请求限制对个人数据的处理 |
| 反对处理权(Object to processing) | 在特定条件下反对对其个人数据的处理 |
| 数据可携带权(Data portability) | 请求将已收集的数据转移给其他组织,或直接转交给用户本人 |
政策同时承诺:用户提出请求后,Wasp Inc. 将在一个月内作出回应。行使权利的途径包括:
- 邮箱:
info@wasp-lang.dev - 地址:2261 Market Street, San Francisco, CA 94114
八、Cookie 详解与管理
8.1 什么是 Cookie
政策将 Cookie 定义为「放置在用户计算机上的文本文件」,用于收集标准的互联网日志信息与访客行为信息。网站可能通过 Cookie 或类似技术自动收集信息。
8.2 网站如何使用 Cookie
Wasp Inc. 使用两类 Cookie 以改进网站体验:
- 功能性 Cookie(Functional cookies):保持登录状态、记住用户偏好;
- 分析型 Cookie(Analytics cookies):理解用户如何使用网站,以改进服务。
8.3 管理 Cookie
用户可以通过浏览器设置拒绝接受 Cookie,或清除浏览器中已有的 Cookie(政策引用了第三方资源 allaboutcookies.org 的操作指引)。政策同时给出诚实的前提提示:在少数情况下,部分网站功能可能因 Cookie 被禁用而无法正常工作。
这与仓库实现中的两个事实相互印证:
- 拒绝 Cookie 会导致 PostHog 分析脚本不加载(见第四章),但网站核心功能(如文档浏览)不受影响,因为核心脚本
requiresConsent: false; - 功能性 Cookie(如记住偏好)若被拒绝,个性化体验会相应降级。
九、第三方网站链接与政策变更
- 第三方网站:网站可能包含指向其他网站的链接,但本隐私政策仅适用于 wasp.sh 自身;用户点击外部链接后,应查阅目标网站自己的隐私政策。
- 政策变更:Wasp Inc. 会定期审查本政策,并将任何更新发布在当前页面;最近一次更新日期为 2026-01-13。用户可通过查看页面顶部的日期戳确认最新版本。
十、如何联系我们与投诉渠道
政策提供了两级联系/救济渠道:
- 直接联系 Wasp Inc.:对隐私政策、持有的个人数据或行使数据权利有任何疑问,可发送邮件至
info@wasp-lang.dev或邮寄至 2261 Market Street, San Francisco, CA 94114; - 联系监管机构:若用户认为问题未得到满意解决,可向其当地的数据保护监管机构(data protection supervisory authority)提交投诉——这是 GDPR 下的标准救济路径。
附:网站隐私与 Wasp CLI 遥测的边界
值得一并厘清的是:上述隐私政策仅覆盖wasp.sh 网站的数据采集,而 Wasp 命令行工具(waspCLI)自身还有一套独立的、面向框架使用者的**遥测(Telemetry)**机制,详见 web/docs/telemetry.md。
两者是相互独立的体系:
| 维度 | 网站隐私政策 | CLI 遥测 |
|---|---|---|
| 数据来源 | wasp.sh 站点访问行为 | wasp命令执行 |
| 采集内容 | IP、浏览器、页面、停留时间 | 随机 UUID(distinct_id)、项目哈希(project_hash)、命令类型、wasp_version、OS、上下文 |
| 发送方式 | PostHog 脚本(需 Cookie 同意) | HTTPS 请求,每 12 小时最多发送 3 次 |
| 退出方式 | 浏览器拒绝 Cookie / 拒绝按钮 | 设置环境变量WASP_TELEMETRY_DISABLE=1 |
CLI 遥测明确声明其数据是匿名化(anonymized)且范围极有限的:distinct_id为随机生成的、不可识别的 UUID,project_hash为不可识别的项目哈希,部署参数仅保留预定义关键词白名单(fly、railway、setup、create-db、deploy、cmd、launch)中的内容。这与网站隐私政策「轻量采集」的总体取向保持一致,共同构成了 Wasp 在数据隐私层面的完整实践。
参考文件索引
- 隐私政策原文
- Cookie 同意横幅组件
- Cookie 同意脚本类型常量
- 站点脚本加载配置
- PostHog 分析脚本
- Wasp CLI 遥测说明
【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考