Python版本:3.6
烧瓶版本:1.1.1
Pymongo版本:3.8.0
Flask-PyMongo版本:2.3.0
当我尝试在Flask中进行任何操作时,我收到未经身份验证的消息,并且似乎flask_pymongo无法进行身份验证。
错误消息:
pymongo.errors.OperationFailure: Authentication failed.
我将URI存储在Flask和尝试通过Pymongo MongoClient连接的.env文件中。我已经尝试对admin和应用程序数据库进行身份验证,并且在两个数据库中都创建了数据库用户:
> use items_db
switched to db items_db
> db.getUsers()
[
{
"_id" : "items_db.items_db",
"user" : "items_user",
"db" : "items_db",
"roles" : [
{
"role" : "readWrite",
"db" : "items_db"
}
]
}
]
我的.env文件URI是:
MONGO_URI=mongodb://items_user:PASS@127.0.0.1:27017/items_db
我还将URI中的auth源更改为:
MONGO_URI=mongodb://items_user:PASS@127.0.0.1:27017/items_db?authSource=admin
使用MongoClient仍然可以,但是在flask_pymongo中不起作用。
我尝试仅使用具有完全相同URI的Pymongo Client进行身份验证,而没有任何问题。我还在管理数据库和应用程序数据库中都创建了数据库用户。
在我的app / __ init__.py文件中:
from app.extensions import mongo
def create_app(config_class=Config):
app = Flask(__name__)
# set app configs
app.config.from_object(config_class)
# initial flask extensions
mongo.init_app(app)
return app
在我的app / main / views.py
中# app/main/views.py
from app import mongo
def create_item(public_id, request):
app.logger.info(mongo.db)
uri = app.config['MONGO_URI']
client = MongoClient(uri)
app.logger.info(client)
日志文件:
[2019-07-14 14:22:43,425] INFO in views: Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=False), 'items_db')
[2019-07-14 14:22:43,429] INFO in views: MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True)
您可以看到connect关键字显示True与False。我正在使用应用程序工厂模式。这会引起这个问题吗?我没有收到任何上下文错误或类似错误。
我还尝试了其他一些建议的解决方案,但没有一个描述我遇到的确切问题。
非常感谢任何帮助。