求助:如何实现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搭建前端页面,按钮点击后执行以下逻辑:
- 通过OAuth获取当前用户的ID和个人AccessToken
- 先发送
GET请求读取目标创意条目已有的投票用户列表 - 检查当前用户是否已投票,避免重复操作
- 发送
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的
fetchAPI异步请求用法,以及JSON数据的处理逻辑。
4. 嵌入Notion使用
- 将写好的前端页面部署到免费平台(如Vercel、Netlify),然后在Notion中添加「嵌入」块,填入部署后的页面链接,成员就能在Notion内直接点击投票按钮。
关键注意事项
- 必须使用用户个人的AccessToken,禁止使用集成的Internal Token,否则无法区分操作的用户身份。
- 一定要处理重复投票的判断逻辑,避免同一个用户多次添加到投票列表。
- 确保集成拥有数据库内容的编辑权限(在集成设置中勾选「Edit content」)。
内容的提问来源于stack exchange,提问作者Hoko NgPh
相关产品推荐
相关产品推荐

