使用flask_pymongo进行身份验证时出现问题

时间:2019-07-14 15:13:04

标签: python mongodb flask flask-pymongo

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。我正在使用应用程序工厂模式。这会引起这个问题吗?我没有收到任何上下文错误或类似错误。

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

非常感谢任何帮助。

0 个答案:

没有答案