Ich versuche, eine Verbindung zu einer MongoDB-Datenbank mit einem Benutzernamen und einem Kennwort herzustellen. Alle Dokumente sagen, dass die Verbindungszeichenfolge aussehen sollte
mongodb://username:[email protected]:port/db
Das Passwort enthält jedoch das Zeichen '@'. Wie kann ich daraus eine Verbindungszeichenfolge machen, die der Mungo verstehen wird? Kann ich das '@' im Passwort umgehen oder gibt es eine andere Verbindungsmethode, die ich verwenden muss?
Verwenden Sie diese Syntax, vergessen Sie nicht die Option uri_decode_auth
.
mongoClient.connect("mongodb://username:p%[email protected]:port/dbname", {
uri_decode_auth: true
}, function(err, db) {
}
);
Verwenden Sie den Parameter options
des Aufrufs mongoose.connect
, um das Kennwort anzugeben, anstatt es in die URL-Zeichenfolge aufzunehmen:
mongoose.connect('mongodb://localhost/test',
{user: 'username', pass: '[email protected]'},
callback);
Wenn Ihr Passwort Sonderzeichen enthält:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
benutze pwd stattdessen pass
mongoose.connect('mongodb://localhost/test',
{user: 'username', pwd: '[email protected]'},
callback);
Ich bin auch mit dem gleichen Problem konfrontiert. Ich habe das Problem gelöst, indem ich ein verschlüsseltes Passwort in die Verbindungszeichenfolge eingefügt habe. Und es funktioniert einfach gut.
(1) Verschlüsseln Sie Ihr Passwort von https://www.url-encode-decode.com
(2) Ersetzen Sie Ihr Passwort durch ein verschlüsseltes Passwort.
(3) Es sollte gut funktionieren.
Zum Beispiel:
Aktuelles Passwort: ABCDEX $ KrrpvDzRTy` @ drf. '; 3X
Kodiertes Passwort: ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X
mongodb: // user1: ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]: 1234, ds1234-test.com: 19889/mongo-dev ReplicaSet = rs-ds123546978
Wenn Sie den nativen Node.js-Treiber von Mongodb verwenden, funktioniert dies für mich ab der 3.1-Treiberversion. Angenommen, Ihre URL enthält keine Authentifizierungsinformationen.
MongoClient = require('mongodb').MongoClient;
let options = {
useNewUrlParser: true,
auth: {
user: 'your_usr',
password: 'your_pwd'
}
};
MongoClient.connect(url, options, callback);
Oder wenn Sie Authentifizierungsinformationen in Ihre URL aufnehmen möchten, gehen Sie wie folgt vor:
let url = "mongodb://username:" + encodeURIComponent("[email protected]") + "@localhost:27017/database"
Versuchen Sie es hier, meine Freunde:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
{user: 'viettd', pass: '[email protected]'});
test
ist mein Datenbankname admin
ist meine Datenbank für die Authentifizierung viettd
ist mein Benutzername [email protected]
ist mein Passwort
manchmal müssen Sie eine Verbindung zur DB herstellen, indem Sie andere tools verwenden, die String nur als Verbindungsstring akzeptieren. Ändern Sie einfach das @ -Zeichen mit% 40
Keine der oben genannten Lösungen funktionierte für mich. Ich recherchierte weiter und fand heraus, dass ich den Parameter useNewUrlParser verwenden musste.
mongoose.connect(db, {
useNewUrlParser : true
},
err => {
if (err){
console.error('Error: ' + err)
}
else{
console.log('Connected to MongoDb')
}
})
Soweit ich verstehe, benötigen Sie eine bestimmte Version von MongoDB, um diese verwenden zu können. Weitere Informationen finden Sie unter Warnung: "Warnung für aktuellen URL-Zeichenfolgenparser ist veraltet", indem Sie useNewUrlParser auf true setzen.
Es soll die Warnung loswerden, aber die Version wirkt sich natürlich auch auf die erforderlichen Parameter aus.
Ich habe nicht alle Sonderzeichen getestet, aber es funktioniert definitiv mit '@ # $'.
Hoffe das hilft.
Für diejenigen, die sich mit Mongo Compass verbinden (MacOSx) Gehen Sie einfach zu Ihrem cluster -> Security (Tab) auf mongodb.com
Dann
edit Ihr Passwort (drücken Sie den Edit-Button Ihres Benutzernamens):
Sie erhalten ein modales/popup/dialog-Fenster: Drücken Sie unter Ihrem Namen das Kennwort bearbeiten (die Schaltfläche ist standardmäßig ausgegraut, wird jedoch direkt unter Ihrem Namen angezeigt). -> Drücken Sie dann Benutzer aktualisieren.
Nächster:
Schließen Sie Ihre Mongo-Datenbankkompassanwendung, wenn sie ausgeführt wird: (Mongo beenden)
Nächster Schritt:
Kehren Sie zur Registerkarte "Übersicht" in mongodb.com zurück und wählen Sie Connect aus.
Nächster Schritt:
Wählen Sie im Popup-Dialog Mit MongoDB Compass verbinden und in der nächsten Ansicht eine Version aus, die Sie verwenden möchten (vorzugsweise Versionsnummer früher):
Dann:
Copy den URI-String, der Ihnen angezeigt wurde:
MongoDB Compass-Anwendung erneut öffnen:
Sie erhalten die Option/popup, um den erkannten URI-String zu verwenden: Klicken Sie auf Yes
Letzter Schritt:
Geben Sie Ihr neues Passwort ein und Connect . Nun sollte Ihre Verbindung erfolgreich sein.
Also, if your password contains a percentage, %,
Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI
for example, if your password is John%Doe, the new transformed password will be John%25Doe or
If password is Paul%20Wait, New Password will be Paul%2520Wait
mongoClient.connect("mongodb://username:John%[email protected]:port/dbname", function(err, db) {
// password is John%Doe
}`enter code here`
);
Diese Lösung erfordert eine zusätzliche Abhängigkeit, aber es hat letztendlich für mich funktioniert.
Fügen Sie mongodb-uri
zu Ihrem Projekt und die folgenden Zeilen zu Ihrem Code hinzu:
const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)
Ich habe diesen Vorschlag in mongoose
s GitHub-Ausgabe # 6044 gefunden.