Dzięki Mattias za poprawną odpowiedź.
Chciałbym dodać, że czasami masz poświadczenia z jednej bazy danych, a chcesz połączyć się z inną. W takim przypadku można nadal używać metody adresu URL do połączenia, po prostu dodając parametr ?authSource=
do adresu URL.
Na przykład powiedzmy, że masz poświadczenia administratora z bazy danych admin
i chcesz połączyć się z bazą danych mydb
. Można to zrobić w następujący sposób:
const MongoClient = require('mongodb').MongoClient;
(async() => {
const db = await MongoClient.connect('mongodb://adminUsername:[email protected]:27017/mydb?authSource=admin');
// now you can use db:
const collection = await db.collection('mycollection');
const records = await collection.find().toArray();
...
})();
Ponadto, jeśli hasło zawiera znaki specjalne, nadal można używać URL sposób tak:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent(adminPassword)}@localhost:27017/mydb?authSource=admin`;
const db = await MongoClient.connect(dbUrl);
Uwaga: We wcześniejszych wersjach { uri_decode_auth: true }
opcja była wymagana (jako drugi parametr metody connect
) podczas używania nazwy użytkownika lub hasła przy użyciu encodeURIComponent
, jednak teraz ta opcja jest przestarzała, działa bez niej.
Po kilku kopaniu wydaje się, że jedynym sposobem uwierzytelnienia jest poziom db, a nie serwer. To ma sens. Poszedłem z # 2. –