多方式注册
P0支持邮箱 + 密码、手机号 + 短信验证码、第三方 OAuth(GitHub / Google / 微信 / Apple)三条注册路径。
实现要点:邮箱注册需发送验证邮件并点击激活;手机号走验证码;OAuth 首次登录自动创建本地账号并在 oauth_accounts 记录绑定关系,后续同一邮箱自动合并。
Module 01 · V1.0 · Identity & Auth
一切内容的归属地,社区的最小不可分割单元
建立可注册、可登录、可识别、可分级的用户身份底座,让后续所有模块(发帖、投票、评论、治理)都有可靠的「谁」可以做主语。
没有用户体系,投票无法去重、评论无法归属、治理无法定责。用户体系是所有功能的地基,必须先于内容落地。
共 8 个功能点,每个功能点给出实现要点,可直接作为开发任务的描述。
支持邮箱 + 密码、手机号 + 短信验证码、第三方 OAuth(GitHub / Google / 微信 / Apple)三条注册路径。
实现要点:邮箱注册需发送验证邮件并点击激活;手机号走验证码;OAuth 首次登录自动创建本地账号并在 oauth_accounts 记录绑定关系,后续同一邮箱自动合并。
统一的登录入口,签发短期 Access Token(15 分钟)+ 长期 Refresh Token(30 天),支持多设备并行登录与单设备下线。
实现要点:Refresh Token 一次性使用并轮换,若检测到已使用的 Token 被再次提交,判定为泄露并吊销该用户全部会话。用户在「安全设置」中可查看所有在线设备并逐一踢出。
区分「账号数据」(用户名、邮箱、密码)与「公开资料」(昵称、头像、简介、主页背景、社交链接),二者解耦。
实现要点:用户名字段全局唯一且不可随意更改(改名限制 30 天一次,并保留历史更名记录);昵称可随时修改。头像与背景图走媒体服务上传,自动生成多尺寸缩略图。
基于行为自动晋升的五级信任模型,等级决定发帖频率、能否私信、投票权重、举报权重与能否上传媒体。
实现要点:TL0 新用户仅能浏览与回复少量次数;完成邮箱验证 + 阅读若干主题升至 TL1;持续活跃无违规升至 TL2;被多篇内容获赞、举报准确率高升至 TL3;由社区领袖手动授予 TL4。升级完全自动,无需人工审批。
双维度声望:发帖 Karma 与评论 Karma 分开统计,避免「只发帖不回帖」的刷分行为。
实现要点:每获得一次 upvote 加 1,downvote 减 1,但计入权重系数(低信任等级账号的票按 0.5 折算)。Karma 不直接展示具体含义,仅作为排序权重与部分版块准入的参考。
展示用户的概览(Karma、注册时间、社区贡献)、内容 Tab(帖子 / 评论 / 收藏 / 赞过)、以及社区勋章墙。
实现要点:主页默认按「热度」聚合该用户的高分内容;引入「是否为本人」判断,本人可见私密 Tab(草稿、已隐藏内容)。
在线设备管理、登录通知、私信白名单、主页可见性、内容搜索可见性、账号注销与数据导出。
实现要点:开启「异地登录提醒」后,每次新设备登录会向邮箱推送通知;注销采用冷静期 7 天后物理删除,期间可撤销。
全局成长值与社区内独立等级/头衔,社区可自定义头衔文案以强化垂直归属感。
实现要点:成长值由签到、发帖、被赞、被采纳等行为累积;社区内等级独立计算,社区管理员可配置等级名称与所需经验。
3 条关键交互的分步流程,按用户体验顺序描述,可直接作为前端开发与可用性测试脚本。
落地页点击「注册」,弹出侧滑面板而非整页跳转,降低流失。
选择注册方式,OAuth 一键授权;邮箱/手机走验证码 + 密码两步。
可选填写昵称与兴趣标签(选填,用于冷启动推荐,可跳过)。
注册成功直接进入「选择社区」引导页,推荐 6–9 个热门社区一键订阅。
首次进入首页展示轻量引导气泡,说明投票与评论的核心操作。
提交凭证,服务端校验后返回 Access + Refresh Token,Refresh 写入 HttpOnly Cookie。
前端将 Access Token 存内存,每次请求带 Authorization 头。
Access 过期收到 401,前端静默调用 /auth/refresh 换新并重放原请求。
Refresh 也失效则跳转登录,并保留原目标路径以便登录后回跳。
后台任务每小时扫描用户行为指标(发帖数、被赞数、举报准确率)。
满足阈值则写入 trust_level 并生成一条「等级提升」通知与站内祝贺卡片。
若连续出现违规(被删帖/被举报成立)则降级,降级同样通知。
6 条硬性约束。这些规则应当在服务层强校验,而非仅在前端提示。
用户名唯一、3–20 字符、仅允许字母数字下划线,且与保留字(admin、mod、system 等)冲突时禁止注册。
同一邮箱只能绑定一个主账号;OAuth 自动合并时以邮箱为主键。
Access Token 有效期 15 分钟,Refresh Token 30 天且一次性轮换。
TL0 用户每分钟最多发 1 帖、10 条评论;TL1 及以上逐步放开。
改名 30 天一次,且历史更名在用户主页可查(防止冒充)。
注销账号后,其公开内容保留但作者标记为 [deleted],评论区保留上下文完整性。
| TL0 · 新用户 | 浏览、限频回复 | 否 | 无 | 0.0 | 需邮箱验证 |
| TL1 · 基础 | 发帖、回复、投票 | 否 | 1x | 0.5 | 自动 |
| TL2 · 成员 | 上传图片、编辑自己的帖子 | 否 | 1x | 1.0 | 自动 |
| TL3 · 常客 | 私信、发起投票帖、举报升级 | 是 | 2x | 1.5 | 自动 |
| TL4 · 领袖 | 创建社区、审批举报、编辑他人帖子 | 是 | 3x | 2.0 | 人工授予 |
本模块涉及的 7 张表。完整字段、索引与说明见「数据表设计」页。
本模块的设计参照了哪些产品,具体参照了什么。
Discourse
TL0–TL4 自动信任等级是免人工审核的最佳实践,直接借鉴。
发帖/评论 Karma 双维度分离,有效抑制刷分。
知乎
盐值体系将内容质量与信用分合并为单一健康度指标。
V2EX
积分与铜币形成软性准入,值得参考其「消耗型」设计。
本模块交付时应当达到的量化目标。未达标即视为该模块未完成。
竞品踩过的坑,以及本模块在实现时最容易犯的错误。
不要在注册环节强制收集过多信息,每多一个必填字段都会显著降低转化。
Karma 若直接展示为「军功章」会诱导刷分,建议弱化展示、强化权重用途。
用户名与昵称必须分离,否则改名会破坏历史链接与 @提及。
Token 存储禁止写入 localStorage,避免 XSS 直接窃取。