pymongo 和 flask 的认证问题

Authentication problems with pymongo and flask

我正在尝试连接 pymongo 和 flask。我这样做了:

app.config['MONGO_HOST'] = 'ds02XX.mongolab.com'
app.config['MONGO_PORT'] = '29224'
app.config['MONGO_DBNAME'] = 'myusername'
app.config['MONGO_USERNAME'] = 'myusername'
app.config['MONGO_PASSWORD'] = 'thislongpasswordthatigotfrommongolab'

然而,当我调用 mongo=PyMongo(app) 时,它根本不起作用。我得到这个错误:

pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u'myusername'), ('nonce', u'somenumbers'), ('key', u'othernumbers')]) failed: auth failed

有什么我可以检查的吗?我使用相同的数据通过 mongo shell 进行连接,并且工作正常!

谢谢,

弗朗西斯

由于某种原因,PyMongo 3.0.3 无法运行。他们 - Mongolab - 说驱动程序应该与 MongoDB 3.0 兼容,而 PyMongo 3.0.3 是。 我恢复到 PyMongo 2.8,它现在可以工作了。

我在使用 MongoDB 2.6 和 PyMongo 3.2 时收到相同的错误消息。尝试将我的 PyMongo 降级到版本 2.7 和 2.8,但没有用。最后,我通过更新连接字符串以包含数据库来成功连接。

更改自:

'mongodb://'+ MONGODB[ 'username' ] + ':' + MONGODB[ 'password' ] + '@' + MONGODB['server'] + ':' + MONGODB['port'] + '/'

'mongodb://'+ MONGODB[ 'username' ] + ':' + MONGODB[ 'password' ] + '@' + MONGODB['server'] + ':' + MONGODB['port'] + '/' + MONGODB['database']

MongoDB 2.6 版要求连接字符串在使用凭据时包含数据库。如果不包含数据库,那么 mongo 客户端将尝试验证并连接到默认的管理数据库。详细here.