簡體   English   中英

如何通過 pymongo 驗證用於 mongodb 身份驗證的用戶名密碼?

[英]how can i validate username password for mongodb authentication through pymongo?

我指的是http://api.mongodb.org/python/current/examples/authentication.html站點以獲取身份驗證機制示例。 我創建了一個用戶管理員,並使用其憑據為我的“報告”數據庫創建了一個用戶。 現在我需要使用用戶名和密碼通過 pymongo 訪問它。 我在 python shell 中嘗試了以下命令。 由於我的身份驗證失敗,這是正確的方法嗎?

from pymongo import MongoClient

client = MongoClient('localhost')

client.reporting.authenticate('reportsUser', '123456', mechanism='MONGODB-CR')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/pymongo/database.py", line 746, in authenticate
    self.connection._cache_credentials(self.name, credentials)
  File "/usr/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 441, in _cache_credentials
    auth.authenticate(credentials, sock_info, self.__simple_command)
  File "/usr/lib/python2.7/dist-packages/pymongo/auth.py", line 214, in authenticate
    auth_func(credentials[1:], sock_info, cmd_func)
  File "/usr/lib/python2.7/dist-packages/pymongo/auth.py", line 194, in _authenticate_mongo_cr
    cmd_func(sock_info, source, query)
  File "/usr/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 607, in __simple_command
    helpers._check_command_response(response, None, msg)
  File "/usr/lib/python2.7/dist-packages/pymongo/helpers.py", line 147, in _check_command_response
    raise OperationFailure(msg % errmsg, code)
pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u'reportsUser'), ('nonce', u'f8158a24f1c61650'), ('key', u'14cea216c54b93bae20acd2e076bb785')]) failed: auth failed

僅供參考,您也可以使用 URI 字符串格式。 偽代碼如下所示:

這是一個帶有 auth 的簡單連接代碼塊:

import pymongo
conn = pymongo.MongoClient('mongodb://root:pass@localhost:27017/')
db = conn['database']
coll = db['collection']

這里有更多的查詢字符串選項: http : //docs.mongodb.org/manual/reference/connection-string/

希望有所幫助 = 看起來您已經擁有它了。 快樂編碼!!

只是在提供的解決方案中添加更多內容。

我一直在使用 URI 連接字符串和憑據作為 f 字符串提供它有助於減少行數。 需要注意的一件事是密碼中的特殊字符,我們使用 urllib 包進行轉換,如下所示。

import urllib.parse
from pymongo import MongoClient

host = "localhost"
port = 27017

user_name = "myuser"
pass_word = "Pass@123"  

db_name = "mydb"  # database name to authenticate

# if your password has '@' then you might need to escape hence we are using "urllib.parse.quote_plus()" 
client = MongoClient(f'mongodb://{user_name}:{urllib.parse.quote_plus(pass_word)}@{host}:{port}/{db_name}') 

它對我有用。

在這里你可以使用認證用戶名和密碼將 mongodb 連接到 python。

import pymongo

DATABASE_NAME = "your_database_name"
DATABASE_HOST = "localhost"

DATABASE_USERNAME = "database_username"
DATABASE_PASSWORD = "database_password"

try:
    myclient = pymongo.MongoClient( DATABASE_HOST )
    myclient.test.authenticate( DATABASE_USERNAME , DATABASE_PASSWORD )
    mydb = myclient[DATABASE_NAME]

    print("[+] Database connected!")
except Exception as e:
    print("[+] Database connection error!")
    raise e

Mongodb 默認使用27017端口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM