wake-up-neo.com

MongoDB-Passwort mit "@" darin

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?

62
iZ.

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) {

    }
);
78
Andrey Hohutkin

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);
25
JohnnyHK

Wenn Ihr Passwort Sonderzeichen enthält:

const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
20
vanduc1102

benutze pwd stattdessen pass

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: '[email protected]'},
                 callback);
4
AKASH

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

4
prisan

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"
2
toadead

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

2
Viet Tran

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

1
dang

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.

1
Thierry

Für diejenigen, die sich mit Mongo Compass verbinden (MacOSx) Gehen Sie einfach zu Ihrem cluster -> Security (Tab) auf mongodb.com

 Cluster-Security

Dann

edit Ihr Passwort (drücken Sie den Edit-Button Ihres Benutzernamens):  enter image description here

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.

 EditPassword in Dialog Popup

Nächster:

Schließen Sie Ihre Mongo-Datenbankkompassanwendung, wenn sie ausgeführt wird: (Mongo beenden)

 Quit Mongo Compass

Nächster Schritt:

Kehren Sie zur Registerkarte "Übersicht" in mongodb.com zurück und wählen Sie Connect aus.

Rückkehr zu OverView:  return to overview and select connect

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):  Connect with MongoDB Compass

 select Version

Dann:

Copy den URI-String, der Ihnen angezeigt wurde:

 Copy Uri String

MongoDB Compass-Anwendung erneut öffnen:

Sie erhalten die Option/popup, um den erkannten URI-String zu verwenden: Klicken Sie auf Yes uri string detected

Letzter Schritt:

Geben Sie Ihr neues Passwort ein und Connect . Nun sollte Ihre Verbindung erfolgreich sein.  Enter new password and Connect

0
RileyManda
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`
);
0

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 mongooses GitHub-Ausgabe # 6044 gefunden.

0
lpacheco