首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoengine - find命令需要身份验证

Mongoengine - find命令需要身份验证
EN

Stack Overflow用户
提问于 2019-02-27 10:31:11
回答 1查看 3.1K关注 0票数 3

我刚开始使用Mongoengine和经过身份验证的MongoDB。

我有一个名为'gambit_test‘的Mongo数据库。我已经在它上启用了身份验证,并且我有一个适当的用户,我可以通过身份验证进入数据库来执行读写操作。

我在Mongo客户端使用以下命令创建了'gambit_test‘的用户:

代码语言:javascript
复制
use gambit_test
db.createUser({
    user: "gambit_admin",
    pwd: "xxxxxx",
    roles:[{role: "userAdmin" , db:"admin"}]
})

当我登录到MongoDB以检查我的用户状态时,我使用如下命令(以超级管理员身份登录):

代码语言:javascript
复制
mongo -u sup_admin -p yyyyyyyy

为了验证我的用户状态,我运行以下命令:

代码语言:javascript
复制
use gambit_test
show users

它返回以下内容:

代码语言:javascript
复制
{
    "_id" : "gambit_test.gambit_admin",
    "user" : "gambit_admin",
    "db" : "gambit_test",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "gambit_test"
        },
        {
            "role" : "dbAdmin",
            "db" : "gambit_test"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

在我的Python test.py代码中,我正在做以下工作:

代码语言:javascript
复制
from mongoengine import *

class History(Document):
    name = StringField(required=True)

if __name__ == "__main__":
    try:
        connect('gambit_test')
        History.objects().get()
    except Exception as e: 
        connect(host='mongodb://gambit_admin:xxxxxx@localhost' + 
        ':27017/gambit_test')
        History.objects().get()

当我尝试运行上面的python代码时,我得到了以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    History.objects().get()
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/mongoengine/queryset/base.py", line 267, in get
    result = six.next(queryset)
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/mongoengine/queryset/base.py", line 1484, in __next__
    raw_doc = six.next(self._cursor)
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/pymongo/cursor.py", line 1189, in next
    if len(self.__data) or self._refresh():
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/pymongo/cursor.py", line 1104, in _refresh
    self.__send_message(q)
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/pymongo/cursor.py", line 982, in __send_message
    helpers._check_command_response(first)
  File "/home/ubuntu/gambit/genv/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
  pymongo.errors.OperationFailure: command find requires authentication

我不知道为什么会发生这样的事情。原因是我可以使用Mongo客户端执行普通的find()和insert()。但是,当我使用Mongoengine时,事情就崩溃了.

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-05-14 22:22:30

为了进一步参考,问题得到修复(https://github.com/MongoEngine/mongoengine/issues/2010)问题是第二个connect调用没有覆盖第一个调用设置的default连接,它只是被静默忽略

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54897134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档