Skip to content

NOTION_WORKSPACE_ID(工作区归属校验) ​

发布日期:2026-10-14 栏目:🛠 站点配置 关联:Issue #4554 · PR #4555

背景 ​

NotionNext 支持通过「按 ID 访问」的方式直接渲染一篇文章(例如分享链接、内嵌子页面)。此前该路径缺少归属校验:只要 URL 最后一段是任意一个「分享到网络」的 Notion 块 id,NotionNext 就会把它当作文章渲染到你的域名下——即使是别人工作区的内容(Issue #4554)。

新版本已在按 ID 兜底渲染前增加工作区归属校验:取回记录所属的工作区必须与本站一致,否则返回 404。

是否需要配置? ​

默认无需配置。 未配置时程序会自动从你的根页面(NOTION_PAGE_ID)记录里读取工作区 id 并缓存,校验照常生效。

配置 NOTION_WORKSPACE_ID 的收益:

  • 省去一次启动时的 Notion 根页面请求
  • 自动推导失败时(如根页面权限受限)作为兜底

配置方法 ​

在 Vercel 环境变量或 local.env / .env.local 中添加:

env
# 可选:博客所在 Notion 工作区(space) id
# 支持 32 位裸 id 或带连字符的 uuid,多工作区用英文逗号分隔
NOTION_WORKSPACE_ID=22222222222222222222222222222222

如何获取工作区 id ​

工作区 id 与页面 id 是两个不同的值。 Notion 页面网址末尾的 UUID 是页面 id,不能填入 NOTION_WORKSPACE_ID。如果把有效的页面 id 当作工作区 id,程序会优先使用这个错误配置,导致本站合法子页面也无法通过归属校验。

推荐保持该环境变量为空,让程序从根页面记录自动读取。如果确实需要手动配置,应查看自己根页面的原始 Notion block 记录,读取所属工作区的 space_id 字段;部分响应会把记录嵌套在 value 内,或在外层提供 spaceId。例如:

json
{
  "id": "11111111-1111-1111-1111-111111111111",
  "space_id": "22222222-2222-2222-2222-222222222222"
}

以上仅为示意数据。应使用 space_id 的实际值,而非 id,也不要直接复制示例值。无法确认工作区 id 时,请删除手动配置后重新部署,恢复自动推导。

多站点说明 ​

  • NOTION_PAGE_ID 配置了多个站点(逗号分隔)且分属不同工作区时,这些工作区都会被自动允许,无需额外配置
  • 若手动配置 NOTION_WORKSPACE_ID,请用逗号列出所有站点所在的工作区 id

行为说明 ​

场景结果
本站文章(slug / 列表匹配)不受影响,不走校验
本站内容按 id 访问、内嵌子页面通过工作区校验后,继续遵循文章发布状态和密码等访问规则
他人工作区分享的内容404,并输出告警日志
工作区 id 暂时无法确认(网络故障等)拒绝输出未验证的正文,恢复后可重试