Python版本:3.6
烧瓶版本:1.1.1
Pymongo 版本:3.8.0
Flask-PyMongo 版本:2.3.0
当我尝试在 Flask 中进行任何操作时,我收到一条未经身份验证的消息,并且似乎 flask_pymongo 没有进行身份验证。
错误信息:
pymongo.errors.OperationFailure: Authentication failed.
我将 URI 存储在 .env 文件中,Flask 以及当我尝试通过 Pymongo MongoClient 连接时都使用该文件。我已经尝试对管理员和应用程序数据库进行身份验证,并且我在两者中都创建了数据库用户:
> 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 中的身份验证源更改为:
MONGO_URI=mongodb://items_user:PASS@127.0.0.1:27017/items_db?authSource=admin
使用 MongoClient 仍然可以正常工作,但在 flask_pymongo 中则不行。
我尝试仅使用具有完全相同 URI 的 Pymongo 客户端进行身份验证,没有任何问题。我还在管理员和应用程序数据库中创建了数据库用户。
在我的 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 vs False。我正在使用应用程序工厂模式。这会导致这个问题吗?我没有收到任何断章取义的错误或类似的错误。
我也尝试了其他一些建议的解决方案,但没有一个能描述我遇到的确切问题。
非常感谢任何帮助。