0

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。我正在使用应用程序工厂模式。这会导致这个问题吗?我没有收到任何断章取义的错误或类似的错误。

我也尝试了其他一些建议的解决方案,但没有一个能描述我遇到的确切问题。

非常感谢任何帮助。

4

0 回答 0