从 Python Eve 连接到访问受控的 MongoDB 副本集

Connecting to access controlled MongoDB replicaSet from Python Eve

我有一个 Eve 应用程序,我想连接到一个 mongodb 副本集。我能够通过将 settings.py 中的 MONGO_URI 参数设置为 mongodb://host/dbName?replicaSet=replicaSetname 来做到这一点 但是,既然我已经在副本集上启用了访问控制,我似乎无法将用户凭据传入。

我正在使用以下形式的 uri:

mongodb://user:password@host/dbName?replicaSet=replicaSetName&authSource=admin

最令人恼火的是,当我将此 URI 直接提供给数据库时,它可以毫无问题地连接和登录。但是,如果我尝试通过 eve 访问某些内容,我会收到以下错误:

pymongo.errors.OperationFailure: Authentication failed.

我尝试了几种变体,包括在 eve 中设置 MONGO_USERNAMEMONGO_PASSWORD 参数。我能想到的唯一可能的问题是我为 eve 创建的用户权限有限(在一个数据库上读写)。

经过一番努力,我设法弄清楚了如何在 eve 上进行操作,其中涉及一些 eve 文档中未提及的设置:

MONGO_HOST = 'mypod-1.mongo,mypod-2.mongo,mypod-3.mongo;
MONGO_USERNAME = 'user'
MONGO_PASSWORD = 'pass'
MONGO_DBNAME = 'mydb'
MONGO_AUTH_SOURCE = 'admin'
MONGO_REPLICA_SET = 'mySet'

而且,因为这让我感到困惑,所以不要在您的设置中将 MONGO_URI 设置为任何内容,甚至 None 也不要设置,因为 eve 会尝试使用 [=17] 上的 URI =]任何其他设置,如果它发现声明的变量。