【问题标题】:How is a Meteor user altered when copying from an existing mongo meteor db从现有的 mongo 流星数据库复制时,流星用户如何更改
【发布时间】:2023-03-30 03:08:01
【问题描述】:

我有一个 Meteor 应用程序在本地和 vm 上运行(对本地的更改被推送到 vm)所以它们之间的代码总是相同的。虚拟机上的应用程序使用位于虚拟机上的 mongodb 实例,而我的本地应用程序使用本地 mongodb 实例(我当然可以在本地使用远程 mongodb 实例,但我不想冒险在开发时弄乱它)。

我的本​​地 mongodb 有问题,所以我完全删除了数据库,转储远程数据库并在本地恢复它,所以本质上两个数据库现在再次相同。

但是,当我在本地登录时,该应用程序无法按预期运行。它允许我使用我的原始用户/密码组合登录,但以前可用的出版物现在不再发布。

如果我使用本地数据库运行我的本地应用程序,登录然后使用 Mongol 查看我的用户 ID,我会得到一个类似 ZmW62ZqEQXjXGzc9Q 的 ID,但如果我使用远程数据库重新启动应用程序,请使用与我相同的用户详细信息登录现在获取 q6drPCkwcRuhL72RF 作为用户 ID。很明显,复制数据库时用户的这种“变化”是导致出版物不可用的原因。

有人能解释一下为什么会发生这种情况,以及如何解决吗?

【问题讨论】:

    标签: mongodb meteor meteor-accounts


    【解决方案1】:

    MongoDB 的 _id 通常是一个 12 字节的 BSON 类型,包含:

    (from the MongoDb documentation)

    • 一个 4 字节的值,表示自 Unix 纪元以来的秒数,
    • 一个 3 字节的机器标识符,
    • 一个 2 字节的进程 ID,以及
    • 一个 3 字节的计数器,从一个随机值开始。

    而 Meteor 的 MongoDB 的默认类型是随机字符串 (see the documentation here)。

    我假设您是通过夹具 (?) 创建用户,因此当您的应用创建新用户时,Meteor 会为其分配一个随机 ID。现在,当您登录时,Meteor 会检查未更改的用户/密码组合,但随后会发回 id(已更改,生成为随机字符串)。

    要绕过它,您可以meteor reset您的应用程序(它会清除本地数据库)。

    【讨论】:

    • 我试过 meteor reset 但这没有帮助。我注意到它确实是我的应用程序中的固定文件创建(或重新创建用户),尽管它们存在于数据库中。因此,如果我流星重置,删除固定装置并启动应用程序,我将无法再登录,但如果我直接查看 mongo 用户数据库,我可以看到用户在那里
    猜你喜欢
    • 2017-08-22
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多