MongoError:未在 db 上授权执行命令?与 socket.io 连接时

Posted

技术标签:

【中文标题】MongoError:未在 db 上授权执行命令?与 socket.io 连接时【英文标题】:MongoError: not authorized on db to execute command? When connection with socket.io 【发布时间】:2017-05-31 15:41:51 【问题描述】:

我无法从 socket.io 连接到我的 mongodb。 当我运行我的 server.js 时,它说它已与 mongodb 连接,并且已连接到套接字,但随后显示错误

MongoError: not authorized on db to execute command find.

我以管理员用户身份登录到 mongo admin 数据库,然后转到“聊天”数据库,并在数据库中创建了一个新用户,角色为“readWrite”,如下所示。

use chat

然后:

db.createUser(user: "testuser", pwd: "testuser", roles: [role: "readWrite", db: "chat" ])
Successfully added user: 
    "user" : "testuser",
    "roles" : [
        
            "role" : "readWrite",
            "db" : "chat"
        
    ]

用户被创建。 当我用db.auth("testuser","testuser") 测试它时,我得到一个 1。 然后我退出并转到我的 bin 文件夹并在那里写:mongo.exe -u testuser -p testuser chat;

然后它连接到mongodb://127.0.0.1:127017/chat

然后我打开一个新提示并转到我的文件夹,其中有与数据库连接的 server.js 并运行它,然后它首先说服务器正在运行并且它与 mongodb 连接。

当我转到我的聊天页面并加载它时,它会说:MongoError not authorized...

我像这样连接我的 server.js 文件

var port = process.env.PORT || 3000;
server.listen(port);
console.log('Server running *:'+port);

var io = require('socket.io').listen(server);
var mongoose = require('mongoose');

//mongoose.connect('mongodb://127.0.0.1:27017/chat', function(err)
mongoose.connect('mongodb://localhost/chat', function(err)

我不知道我错过了什么,我已经关注了 mongodb 上的文档并查看了整个网络,但不确定我哪里出错了。

任何意见都非常感谢。

当我加载聊天页面并查看控制台时,我收到此错误。

https://manmade.se:3000/socket.io/?EIO=3&transport=polling&t=Lceu0Ot&sid=wbFhDl7yylt4_4a1AAAA net::ERR_CONNECTION_RESET

index_webb.html:1 WebSocket connection to 'wss://manmade.se:3000/socket.io/?EIO=3&transport=websocket&sid=wbFhDl7yylt4_4a1AAAA' failed: WebSocket is closed before the connection is established.

【问题讨论】:

您确定连接到正确的端口吗? 是的,我之前可以正常工作,但后来我重新安装了 mongodb,现在我无法正常工作。 【参考方案1】:

该错误似乎表明通过您的程序您没有在正确的数据库上进行身份验证。

从外壳连接时,在您的特定情况下,这将导致错误:

mongo -u test -p test

您必须指定聊天数据库:

mongo chat -u test -p test

我认为这不是套接字错误,因为您正在连接,错误消息似乎表明您只是没有在正确的数据库(在本例中为聊天数据库)上进行身份验证

【讨论】:

好的,谢谢。所以当我登录时,我必须先以管理员身份登录到 admin 数据库?我已经为此工作了一整天,现在我开始很困惑,不知道我测试了什么而不知道。 我想与哪个用户联系?有读写权限的吗? 好的,所以我以管理员身份登录并使用:使用聊天,然后我在“聊天”数据库中使用“readWrite”创建了一个新用户。它是按应有的方式创建的。当我使用 db.auth("testuser","testuser") 进行测试时,我得到 1。然后我尝试站在 bin 文件夹中: mongo -u testuser -p testuser chat;然后我得到一个错误说;不见了哈哈... 您可以连接任何具有读写权限的用户。即使您的用户“test”在聊天数据库中具有读写权限,但实际用户是在管理数据库还是聊天数据库中创建的? 我刚刚创建了一个新用户,并以管理员身份登录,然后使用 use chat 进入聊天数据库,并在那里创建了一个新用户。我已经用我刚才所做的最新问题更新了我的问题。

以上是关于MongoError:未在 db 上授权执行命令?与 socket.io 连接时的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB开启的 --auth 之后,使用 db.eval() 报错MongoError: not authorized on wang to execute command

错误:无法添加用户:未在测试中授权执行命令 createUser:

MongoError: 必须使用 Mongo DB Native NodeJS Driver 对所有 $meta 排序键进行 $meta 投影

MongoDB 驱动程序:MongoError:未找到游标,游标 ID:7820213409290816 在命名空间:db_name.collection_name

未在 H2 数据库上执行的 Sql 查询

“读取”命令未在“读取行”循环中执行[重复]