【发布时间】:2022-04-24 07:22:06
【问题描述】:
我的问题是how can i validate username password for mongodb authentication through pymongo? 的规范。
我正在尝试使用 PyMongo 3.2.2 和包含用户和密码的 URL 连接到 MongoDB 实例,如 MongoDB Docs 中所述。不同之处在于我使用的密码包含一个“@”。
起初我只是尝试连接而不转义,如下所示:
prefix = 'mongodb://'
user = 'user:passw_with_@_'
后缀 = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(前缀+用户+后缀)
我自然得到以下错误:
InvalidURI: ':' or '@' characters in a username or password must be escaped according to RFC 2396.
所以我尝试使用 urllib.quote() 转义 user:pass 部分,如下所示:
prefix = 'mongodb://'
user = urllib.quote('user:passw_with_@_')
后缀 = '@127.0.0.1:27001/'
conn = pymongo.MongoClient(前缀+用户+后缀)
但后来我得到了一个:
OperationFailure: Authentication failed.
(重要的是,使用 GUI MongoDB 管理工具(Robomongo,如果这很重要)我可以使用(真实)地址和凭据连接到 MongoDB。)
在上面的代码中打印用户变量生成了一个'user:passw_with_%40_' 字符串(即'@'变成了'%40'),根据wikipedia,这是预期的转义。
我什至尝试使用单反斜杠和双反斜杠(user = 'user:passw_with_\\@_' 和 user = 'user:passw_with_\@_')转义 @,但由于 InvalidURI 异常而失败。
TL;DR;
我的问题是:如何在 MongoDB URL 的密码部分中转义“@”?
【问题讨论】:
标签: python mongodb authentication pymongo-3.x