PyMongo身份验证失败

时间:2016-07-10 03:07:50

标签: python mongodb authentication pymongo nosql

我使用mongolab建立了一个数据库,其中db与集合的名称相同。我决定不喜欢这个删除它并制定了更好的命名方案。我为新数据库添加了一个新用户/密码,并尝试进行身份验证。它一直在失败。不知道为什么。我仔细检查了我的凭据,他们是正确的。我已经检查了mongolab提供的URI,这也是正确的。这段代码适用于第一个db。

这是我的登录代码

def __init__(self, user_id, password, database, collection):
        # mongodb://<dbuser>:<dbpassword>@ds017205.mlab.com:17205/words
        mongodb_uri = "mongodb://" + user_id + ":" + password + "@ds017205.mlab.com:17205/" + database
        client = pymongo.MongoClient(mongodb_uri)
        db = client[database]
        self.collection = db[collection] # is declared in class

这会产生以下错误

Error
Traceback (most recent call last):
  File "C:\Users\Austin\PycharmProjects\Words\test_mongodb.py", line 15, in testUpdate
    results = self.mongodb_obj.update(test)
  File "C:\Users\Austin\PycharmProjects\Words\mongodb.py", line 38, in update
    upsert=True
  File "C:\Python33\lib\site-packages\pymongo\collection.py", line 2235, in update
    with self._socket_for_writes() as sock_info:
  File "C:\Python33\lib\contextlib.py", line 48, in __enter__
    return next(self.gen)
  File "C:\Python33\lib\site-packages\pymongo\mongo_client.py", line 718, in _get_socket
    with server.get_socket(self.__all_credentials) as sock_info:
  File "C:\Python33\lib\contextlib.py", line 48, in __enter__
    return next(self.gen)
  File "C:\Python33\lib\site-packages\pymongo\server.py", line 152, in get_socket
    with self.pool.get_socket(all_credentials, checkout) as sock_info:
  File "C:\Python33\lib\contextlib.py", line 48, in __enter__
    return next(self.gen)
  File "C:\Python33\lib\site-packages\pymongo\pool.py", line 541, in get_socket
    sock_info.check_auth(all_credentials)
  File "C:\Python33\lib\site-packages\pymongo\pool.py", line 306, in check_auth
    auth.authenticate(credentials, self)
  File "C:\Python33\lib\site-packages\pymongo\auth.py", line 436, in authenticate
    auth_func(credentials, sock_info)
  File "C:\Python33\lib\site-packages\pymongo\auth.py", line 416, in _authenticate_default
    return _authenticate_scram_sha1(credentials, sock_info)
  File "C:\Python33\lib\site-packages\pymongo\auth.py", line 216, in _authenticate_scram_sha1
    res = sock_info.command(source, cmd)
  File "C:\Python33\lib\site-packages\pymongo\pool.py", line 213, in command
    read_concern)
  File "C:\Python33\lib\site-packages\pymongo\network.py", line 99, in command
    helpers._check_command_response(response_doc, None, allowable_errors)
  File "C:\Python33\lib\site-packages\pymongo\helpers.py", line 196, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: Authentication failed.

对此的帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

代码没有问题......数据库用户设置在设置框中输入错误的密码两次,所以它被接受然后当代码试图使用实际的正确答案时,它将不起作用原因。感谢所有人的期待