【问题标题】:PyMongo authentication failingPyMongo 身份验证失败
【发布时间】:2016-11-12 07:04:08
【问题描述】:

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

这是我的登录代码

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.

我们将不胜感激。谢谢

【问题讨论】:

  • 您使用的是什么版本的 pymongo 和 MongoDB?根据authentication examples doc page,您需要对密码中的任何字符进行转义吗?
  • 我使用的是最新版本的 mongodb 和 pymongo。下载了最近的一个三四天去。为 pymongo 安装了 pip
  • 刚刚尝试转义密码中的特殊内容并得到相同的结果。它也可以在没有转义的情况下工作。

标签: python mongodb authentication pymongo nosql


【解决方案1】:

代码没有问题...设置的 db 用户在设置框中输入了两次相同的错误密码,因此它被接受了,然后当代码尝试使用实际正确答案时,它显然不起作用原因。感谢大家观看

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多