mirrors2 / opencatd-open

opencatd-open 是 OpenCat团队版的开源实现
https://opencatd.zeabur.app
GNU General Public License v3.0
238 stars 77 forks source link

支持为 user 指定 token(用户崩溃恢复后的原用户密码恢复) #21

Closed chinyajie closed 1 year ago

chinyajie commented 1 year ago

我在 zeabur 部署后,意外同步更新一次,意外zeabur deployment崩溃一次,都造成团队信息丢失。 因为创建用户 token 是随机 uuid 生成的,后续就算再创建用户,token 也变了,需要一一通知之前的团队成员。对于使用服务的”老年“用户体验不佳。

那能否通过设置环境变量或者调用接口这样的方式,指定用户的密码呢。如可以自己再改回之前的 token 密码就可以伪无缝升级。 我学些了下项目代码,发现只要简单修改 HandleResetUserToken 接口就可以实现,自己试了下效果简单,且不影响原来的接口的正常使用。

具体逻辑是,一旦原来的 opencatd-open deployment崩溃或重启后,数据丢失,那么久重新初始化,然后重新创建之前的团队成员用户,然后根据之前发出的 token 进行 user reset token

  1. 重新部署 opencatd-open deployment
  2. 使用 opencat 或者 ama问天 或者 curl 初始化 root,产生 root token 可能是 3hahaxixilala3d4d4bd7528c 这种
  3. 使用团队成员的名字依次创建成员用户,此时他们会产生新的 token,可以完全忽略
  4. 拿到 root 的 token,进行 Authorization,curl 调用接口操作拿到用户列表 curl -H "Authorization: Bearer 3hahaxixilala3d4d4bd7528c" -i "https://yourname.zeabur.app/1/users",你将看到每个用户对应的 id,从2开始,后续用这个id就可以修改他的token
  5. 搜索你的微信记录或邮箱,找出之前发给他们的token或者链接,找到老token,可能是 4hehehehehehlaotoken887c 这种,然后调用 curl 发送请求 curl -H "Authorization: Bearer 3hahaxixilala3d4d4bd7528c" -d '{"id":1}' -i "https://yourname.zeabur.app/1/users/2/reset?token=c4hehehehehehlaotoken887c" 此时这个 id 是2的老用户就已经恢复了之前的 token

我整理下代码,一会试试发个 pr。只改了 HandleResetUserToken,且用的是查询参数传递老 token,所以接口还是兼容之前的老用法。