2015-10-04 68 views
2

我正在尝试连接pymongo和烧瓶。我这样做:pymongo和烧瓶的身份验证问题

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连接,并且它工作正常!

感谢,

弗朗西斯

+0

什么版本的mongodb和pymongo? –

+0

我使用的是heroku和mongolab,所以我不确切知道哪个版本是由mongolab运行的。然而,我的requirements.txt如下:Flask == 0.10.1 Flask-PyMongo == 0.3.1 Flask-RESTful == 0.3.4 Jinja2 == 2.7.3 MarkupSafe == 0.23 Werkzeug == 0.9.6 aniso8601 == 0.82 gunicorn == 19.0.0 itsdangerous == 0.24 pymongo == 3.0.3 pytz == 2014.4 6 == 1.7.2 – francisaugusto

+0

它本地工作,但不是在Heroku - 不知何故我在本地修复它。 – francisaugusto

回答

1

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

0

我在使用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