【问题标题】:ORM error when password passed to mongodb from sails.js密码从sails.js传递给mongodb时出现ORM错误
【发布时间】:2016-01-15 04:01:56
【问题描述】:

我正在尝试使用带有 MongoDB 作为数据库的sails.js,我认为我犯了一些基本错误,但无法弄清楚它是什么(是的,这两个框架的新手方面都有点):

如果我在sails 中使用默认的mongo 连接代码,似乎没有问题,而且似乎连接正常:

someMongodbServer: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017, }

现在,如果我向此连接添加“用户”,它也可以正常工作:

someMongodbServer: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
user: 'someusername', }

奇怪的事情从这里开始,如果我输入一个在我的 MongoDB 设置中不存在的用户名,它也可以工作。

当我使用这样的密码进行操作时 -

someMongodbServer: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
user: 'someusername',
password: '1111', }

它抛出以下错误并拒绝启动服务器:

A hook (`orm`) failed to load!

为了检查,我通过终端输入了 MongoDB 的用户名和密码,如下所示:

mongo --port 27017 -u "someusername" -p "1111" --authenticationDatabase "admin"

它工作正常,所以这个用户存在并且这是密码(对吗?)。

我什至无法确定问题出在我的 mongo 设置中还是在sails 中。

【问题讨论】:

  • 尝试在密码下方添加“数据库:'database_name_here”。只是一个建议,没有承诺 - 如果有任何不同,请报告。您使用的是什么版本的sailsJs 和sails-mongo 适配器?
  • 这并没有什么不同——不管有没有数据库信息,拥有密码都不会让服务器启动,拥有用户名似乎根本没有效果。我正在使用最新版本:sails v0.11.2 和sails-mongo v0.11.5
  • 从命令行登录mongo,不要指定用户名和密码。你可以访问吗?还可以尝试在没有用户名或密码的情况下从sailsjs 登录,并实际使用sailsjs 更新您的mongo 数据库中的一些集合。换句话说,验证sailsjs 是否正在愉快地执行CRUD 操作(通过水线)。让我知道结果 - 取决于它是什么 - 我们可能已将问题隔离到您的 mongo 身份验证设置。
  • so:可以在没有用户名和密码的情况下从命令行访问 mongo(尽管用户名或密码错误,但不起作用)。 Sails 确实按预期使用了数据库——至少我认为是这样。当我通过风帆发布时,稍后会通过风帆看到结果。但是,当我尝试在 mongo 中查看这个(使用 db.collection.find().pretty())时,没有可见的结果。但是,该集合确实存在(当我使用显示集合时)。我很困惑。
  • 查看您的 config/connections.js 文件 - 启用了哪个适配器? (未注释)。确保它只是 mongoServer 适配器设置(将其他所有内容注释掉)。此外,您将在项目的基础中看到一个 .tmp 文件夹。你看到localDiskDb.db 文件了吗?如果是这样,请删除它,看看现在启动应用程序时您的结果是否仍然可见?从你到目前为止告诉我的 a).您的 mongo 授权设置不正确,并且 b)。目前还怀疑sails 是否真的成功地与mongo 交谈。是用 localDisk 代替吗?

标签: node.js mongodb sails.js


【解决方案1】:

您可以通过使用 mongodb 和 authenticationDatabase 来使用

MongodbServer: { adapter: 'sails-mongo', host: 'localhost', port: 27017, username: 'xxxx', //optional password: 'xxxx', //optional database: 'xxxx', //Database u need to connect to, authenticationDatabase: 'admin' // Database you want use for authentication },

在这样做之前,请确保您已使用创建的数据库 use admin

然后创建具有权限的用户名/密码和数据库

db.createUser({ user:"<USER_NAME>", pwd: "<PASSWORD>", roles: [{role: "userAdminAnyDatabase", db: "admin"}] })

在此处阅读有关 MongoDB 角色的更多信息:MongoDB Roles

如果你不指定 authenticationDatabase,mongo 默认使用相同的数据库进行身份验证,并在用户表中查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多