跳转至

免登录用户身份方案(MVP 验证阶段)

制定:2026-08-12 | 结论:MVP 阶段全部去掉注册登录,用"设备唯一身份"作为默认用户身份。


一、核心思路

注册登录是验证阶段的最大转化杀手。没有微信/短信资质时,正确做法是:

每个访问者 = 一个设备唯一 ID(浏览器生成),无需注册。

  • 同一浏览器/设备打开任意站点 → 自动获得一个稳定 ID(存 localStorage + cookie)
  • 点赞/评论/收藏/保存进度等,全部按这个 ID 归属
  • 你因此能判断"多少独立设备来过、谁点过赞、谁评论过",同时零登录摩擦

二、已实现:全站统一的默认身份

所有 9 个站点已加载 interact.dreamsync.cn/interact.js,它现在会为每个访问者:

  1. 生成设备 ID(u-时间戳-随机数),存 localStorage(interact_user_hash)
  2. 暴露 window.__visitorId(前端直接用)
  3. 写入 cookie _vid(后端直接读)
  4. 触发 visitor-ready 事件
前端:   window.__visitorId          → "u-mxxxxx-xxxx"
Cookie: _vid=u-mxxxxx-xxxx          → 服务端可读

三、各项目怎么用这个身份(不用建账号)

前端(任意项目):

// interact.js 已加载的前提下
var uid = window.__visitorId || '';

后端读取 _vid cookie:

# Flask / FastAPI
uid = request.cookies.get('_vid', 'anon')
// Next.js 服务端组件 / API 路由
const uid = req.cookies._vid || 'anon';
// Express
const uid = req.cookies._vid || 'anon';

示例:某功能要"给用户保存一份东西" - 表里加一列 vid TEXT(就是 _vid) - 保存时 INSERT ... vid=uid;读取时 SELECT ... WHERE vid=uid - 用户清 cookie 会丢,但对验证期完全够用

四、项目登录门槛盘点(现状)

项目 是否需要动 说明
writeforge 妙笔 ✅ 无需 本就免登录单机
玛瑙湖 agate ✅ 无需 无登录,微信钩子收集留资
发现者 discoverer ✅ 无需 已有游客模式(guest_id)
牛马拜神 niuma ✅ 无需 无强制登录
学途领航 gaokao ✅ 无需 后端无强制鉴权
AI摄影馆 aiphoto ✅ 无需 登录只在 admin 后台(你自己用),用户流程开放
FinOps aifinops ✅ 无需 无登录
蔬果帮手 produce ✅ 无需 无登录
名著童话镇 storytown ⏸️ 待恢复时处理 有微信 OAuth 路由未配置;恢复时别用微信登录,改用 _vid

结论:几乎不用"去掉"什么——大部分项目本来就是开放的。真正要做的是:以后新功能一律用 _vid,别再加登录。aiphoto 的 admin 后台登录保留(那是你的管理面板,不是用户登录)。

五、唯一性说明(重要认知)

  • 设备 ID ≠ 真人:同一人手机+电脑 = 2 个 ID;同一台电脑两人用 = 1 个 ID
  • 验证阶段这完全够用:你要判断的是"有没有真实的人在互动",不是"注册了多少用户"
  • 统计"独立设备"已经够:umami/stats + interact 的 user_hash 都能去重
  • 真到要上线收费时,再加微信/手机登录,_vid 可以平滑升级成"游客 → 绑定账号"

六、一句话

MVP 期:别做注册登录。设备 ID(_vid)就是默认用户身份。已有 9 站点全支持,新功能直接用它。