Mongoengine和Flask的验证错误?

问题描述 投票:0回答:1

[当尝试使用以下命令直接从Shell连接到Mongo时:

mongo admin -u superadmin -p super_password 

一切都很好,但是将相同的凭据与flask_mongoengine一起使用会引发以下错误:

pymongo.errors.OperationFailure: Authentication failed.

我的config.py

MONGODB_DB = os.getenv('DATABASE_NAME', 'db')
MONGODB_HOST = os.getenv('DATABASE_HOST', 'localhost')
MONGODB_PORT = int(os.getenv('DATABASE_PORT', 27017))
MONGODB_USERNAME = os.getenv('DATABASE_USER')
MONGODB_PASSWORD = os.getenv('DATABASE_PASS')

我的.env文件:

DATABASE_NAME=mydb
DATABASE_HOST=myhost
DATABASE_PORT=27017
DATABASE_USER=superadmin
DATABASE_PASS=super_password
python mongodb flask mongoengine flask-mongoengine
1个回答
0
投票

我相信问题是您的用户未在mydb中注册。

[当您使用mongo admin -u superadmin -p super_password从mongo shell连接时,它将针对admin数据库进行身份验证并打开该管理数据库。

[当您想连接到某个数据库(例如mydb)时,要么需要在该特定数据库中拥有一个用户,要么需要明确指定您要通过另一个数据库进行身份验证(即,在admin数据库中这种情况)通过指定authsource

根据mongoengine doc中的指定,您可以使用URI样式进行连接:在普通的mongoengine中,这将是

from mongoengine import connect
connect(host="mongodb://username:password@host1:port1/database?authSource=source_database"
)
# in your case that would be
# host="mongodb://superadmin:super_password@myhost:27017/mydb?authSource=admin"

并且使用flask-mongoengine:

app.config['MONGODB_SETTINGS'] = {
    'host': "mongodb://username:password@host1:port1/database?authSource=source_database"
}
© www.soinside.com 2019 - 2024. All rights reserved.