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 帮助我找到它。
我有这一段代码,它是我的 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 帮助我找到它。