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

求助:如何实现Notion数据库中自动添加当前用户至Person property的按钮

解决Notion创意投票的身份验证投票按钮方案

核心思路

要实现点击按钮自动添加自身姓名到Person属性,确实需要Notion API配合前端逻辑,核心是验证当前操作的用户身份,从根源避免代投漏洞。

步骤拆解&学习资源

1. Notion API基础入门

  • 先完成前置配置:在Notion设置的「Integrations」中创建新集成,获取Internal Integration Token(即API密钥),并将该集成共享到你的投票数据库。
  • 重点学习官方文档中的「Getting Started」系列,聚焦数据库条目更新、Person类型字段的结构规则,理解PATCH请求的使用方式——这是修改数据库内容的核心请求方法。
  • 吃透关键概念:搞清楚数据库ID、页面ID的获取方式,以及Person属性的格式要求(是包含object: "user"和用户id的数组)。

2. 用户身份验证实现

  • 必须用Notion的OAuth授权流程:让成员通过Notion账号登录你的投票页面,获取其个人AccessToken和用户ID,以此确认操作主体是用户本人,不能直接使用集成的固定API密钥(会导致权限泄露,无法区分操作者)。
  • 学习OAuth授权码流程:参考Notion官方的OAuth文档,重点掌握获取当前用户信息的接口(GET /users/me),通过这个接口能拿到唯一的用户ID。

3. 投票按钮的逻辑实现

  • 用简单的HTML+JS搭建前端页面,按钮点击后执行以下逻辑:
    1. 通过OAuth获取当前用户的ID和个人AccessToken
    2. 先发送GET请求读取目标创意条目已有的投票用户列表
    3. 检查当前用户是否已投票,避免重复操作
    4. 发送PATCH请求,将当前用户ID添加到Person属性的数组中
  • 示例代码片段(JS):
// 假设已获取用户的accessToken、userId,以及目标创意的pageId
const submitVote = async () => {
  // 获取当前条目已有的投票用户
  const getRes = await fetch(`https://api.notion.com/v1/pages/${pageId}`, {
    headers: {
      "Authorization": `Bearer ${userAccessToken}`,
      "Notion-Version": "2022-06-28"
    }
  });
  const pageData = await getRes.json();
  const existingVoters = pageData.properties["投票人"].people || [];

  // 检查是否已投票
  if (existingVoters.some(voter => voter.id === userId)) {
    alert("你已经投过票了");
    return;
  }

  // 更新条目,添加当前用户
  const patchRes = await fetch(`https://api.notion.com/v1/pages/${pageId}`, {
    method: "PATCH",
    headers: {
      "Authorization": `Bearer ${userAccessToken}`,
      "Content-Type": "application/json",
      "Notion-Version": "2022-06-28"
    },
    body: JSON.stringify({
      properties: {
        "投票人": {
          people: [...existingVoters, { object: "user", id: userId }]
        }
      }
    })
  });

  const result = await patchRes.json();
  result.object === "page" && alert("投票成功");
};
  • 补充学习:掌握JS的fetch API异步请求用法,以及JSON数据的处理逻辑。

4. 嵌入Notion使用

  • 将写好的前端页面部署到免费平台(如Vercel、Netlify),然后在Notion中添加「嵌入」块,填入部署后的页面链接,成员就能在Notion内直接点击投票按钮。

关键注意事项

  • 必须使用用户个人的AccessToken,禁止使用集成的Internal Token,否则无法区分操作的用户身份。
  • 一定要处理重复投票的判断逻辑,避免同一个用户多次添加到投票列表。
  • 确保集成拥有数据库内容的编辑权限(在集成设置中勾选「Edit content」)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:01