领口微湿的博客迁移翻车记录:Mix-Space博客认证

字号
字体
版心
外观
天空

领口微湿的博客迁移翻车记录:Mix-Space博客认证

I

Incohua

•2 分钟阅读

😫 背景:一次“轻车熟路”的服务器迁移事故#

最近,我在 Netcup 购买的服务器快到期了,于是我决定把我的博客迁移一下,顺便换个新域名。

之前已经折腾过一两次了,本以为这次会是轻车熟路,结果... ( ̄▽ ̄)".

在迁移域名的时候,我犯了个致命的错误:忘记修改 .env 文件里的域名了,同时也忘了更新认证服务里的域名。

这就很严重了!😱 在我一顿“骚操作”之后,我发现自己彻底登录不了博客后台了。

无奈之下,我决定“曲线救国”,回到旧服务器上看看能不能修复。结果你猜怎么着?

居然还是认证失败!Σ(っ °Д °;)っ 我在 GitHub OAuth 应用里把域名改了也无济于事。

x=x有点慌。。。

冷静下来想了想,认证相关的信息应该都存储在数据库里。那么,直接“动刀”数据库或许是唯一的办法了。

🚀 流程:手把手教你“修正”数据库#

📦 第一步:备份!备份!备份!#

重要的事情说三遍!在进行任何危险操作之前,一定要先备份。

备份主要有两种方式:

  1. “通通打包带走”:将整个项目目录打包。简单粗暴,我喜欢!

  2. Mix-Space 自带备份:备份 ~/data/mx-space/backup 目录。

    理论上只备份这个目录就足够了。

备份完成后,就可以开始我们的“手术”了。

🔧 第二步:深入数据库容器#

我的博客是使用 docker-compose 部署的,所以接下来的操作都将基于 docker-compose。

这是我的 docker-compose.yml 中 mongo 服务的部分配置:

yaml
mongo:
  container_name: mongo
  image: mongo
  volumes:
    - ./data/db:/data/db
  networks:
    - mx-space
  restart: unless-stopped

通过 docker ps 可以看到正在运行的容器:

bash
Shiroi      ghcr.io/incohua/shiroi:latest   "docker-entrypoint.s…"   shiro     16 minutes ago   Up 15 minutes             127.0.0.1:2323->2323/tcp, [::]:2323->2323/tcp
mongo       mongo                           "docker-entrypoint.s…"   mongo     16 minutes ago   Up 15 minutes             27017/tcp
mx-server   innei/mx-server:latest          "./docker-entrypoint…"   app       16 minutes ago   Up 15 minutes (healthy)   127.0.0.1:2333->2333/tcp, [::]:2333->2333/tcp
redis       redis:alpine                    "docker-entrypoint.s…"   redis     16 minutes ago   Up 15 minutes (healthy)   6379/tcp

接下来,我们进入 mongo 容器的 bash 环境:

bash
docker compose exec mongo bash

🔍 第三步:定位并修改认证设置#

成功进入容器后,我们使用 mongosh 连接到数据库:

bash
root@592e3cc53c54:/# mongosh
Current Mongosh Log ID: 68cebxxxxxf87fd
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.8
Using MongoDB:          8.0.13
Using Mongosh:          2.5.8

For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/

输入 show dbs 查看所有的数据库:

bash
test> show dbs
admin      40.00 KiB
config    108.00 KiB
local      72.00 KiB
mx-space    2.39 MiB
test>

mx-space 显然就是我们的目标数据库啦!( •̀ ω •́ )✧

切换到 mx-space 数据库,并使用 show collections 查看所有的集合(类似于传统数据库里的“表”):

bash
test> use mx-space
switched to db mx-space
mx-space> show collections
accounts
activities
# ... (此处省略一堆集合名)
options
# ...
users

经过一番探索,我发现认证相关的配置应该在 options 这个集合里。

我们用 db.options.find().pretty() 来看看里面的内容。

顺便吐槽一下,MongoDB 里的好多数据都是明文存储的,没有经过加密或混淆,感觉不太安全呀... 😅

这里我截取了关键部分,也就是我们需要修改的地方:

json
{
  "_id": ObjectId("679fxxxxxxxxxxxx93"),
  "name": "oauth",
  "__v": 0,
  "value": {
    "providers": [ { "type": "github", "enabled": true } ],
    "secrets": {
      "github": { "clientSecret": "fab4xxxxxxxxxx7be6b" }
    },
    "public": { "github": { "clientId": "Ov23lxxxxxxBcr36" } }
  }
},
{
  "_id": ObjectId("679fxxxxxxxxxxx4"),
  "name": "authSecurity",
  "__v": 0,
  "value": { "disablePasswordLogin": true } // <-- 就是你!
},

我们的目标是先把密码登录功能打开,这样就能进入后台去修改其他设置了。

执行下面的命令,将 disablePasswordLogin 的值改为 false:

javascript
db.options.updateOne(
  {name: 'authSecurity'},
  {$set: {'value.disablePasswordLogin': false}}
)

最后,我们来验证一下是否修改成功:

javascript
mx-space> db.options.findOne({name: 'authSecurity'})
{
  "_id": ObjectId("6xxxxxxxxxxxxxx94"),
  "name": "authSecurity",
  "__v": 0,
  "value": { "disablePasswordLogin": false } // <-- 搞定!
}

可以看到,disablePasswordLogin 已经成功变为 false。

现在,理论上刷新一下博客的登录页面,就应该可以看到久违的密码登录框啦!🎉 Mission Complete

评论 0

按时间排序
评论还没开通
  1. 还没有评论。