Heroku mLab MongoDB 管理员用户无权在 Flask 应用程序中进行查询

Heroku mLab MongoDB admin user not authorized for query in Flask application

我有这一段代码,它是我的 Flask 应用程序的一部分。我正在使用 flask_mongoengine.

app = Flask(__name__)
app.config.from_object('config')
db = MongoEngine(app)

from .models import *


@app.context_processor
def inject_config():
    return dict(Config.objects.first(), version=version)

Config.models 中扩展文档的 class。

class Config(Document):
    title = StringField()
    description = StringField()
    keywords = StringField()
    author = StringField()
    version = StringField()
    meta = {"collection": "web_config"}

调用 Config.objects 时,返回错误:

pymongo.errors.OperationFailure: database error: not authorized for query on heroku_dptwtq1j.web_config

我是通过管理员用户登录的。为什么我无权查询?还有,如何授权自己查询?

我通过另一个使用 PyMongo 的应用程序查询没有问题,那么为什么它在 Flask 中不起作用?

所以,回答我自己的问题:问题可能出在 flask_mongoengine 库中。我切换到 mongoengine 并且工作正常。

如果您仍想使用 flask_mongoengine,https://github.com/MongoEngine/mongoengine/issues/851 中提到了一个解决方法,它为我修复了它(虽然不理想)

来自 allanlei: 我的解决方法实际上是修补 flask-mongoengine.connection._resolve_settings() 以将 host=mongodb://.... 传递给 mongoengine.connect()

感谢 mLabs 的 Chuck 帮助我找到它。