web-dev-qa-db-fra.com

Mot de passe MongoDB avec "@" dedans

J'essaie de me connecter à une base de données MongoDB avec un nom d'utilisateur et un mot de passe à l'aide de Mongoose dans Node.js. Tous les docs disent que la chaîne de connexion devrait ressembler à

  mongodb://username:password@Host:port/db

Cependant, le mot de passe contient le caractère "@". Comment puis-je créer une chaîne de connexion que la mangouste comprendra? Puis-je échapper le "@" dans le mot de passe ou puis-je utiliser une autre méthode de connexion?

62
iZ.

Utilisez cette syntaxe, n'oubliez pas l'option uri_decode_auth.

mongoClient.connect("mongodb://username:p%40ssword@Host:port/dbname", { 
    uri_decode_auth: true 
    }, function(err, db) {

    }
);
78
Andrey Hohutkin

Utilisez le paramètre options du mongoose.connect call pour spécifier le mot de passe au lieu de l'inclure dans la chaîne de l'URL:

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: 'p@ssword'},
                 callback);
25
JohnnyHK

Si votre mot de passe comporte des caractères spéciaux:

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

utiliser pwd à la place, cela a fonctionné pour moi pour la version 3.2

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: 'p@ssword'},
                 callback);
4
AKASH

J'ai également fait face au même problème. J'ai résolu en ajoutant un mot de passe codé dans la chaîne de connexion. Et ça marche juste bien.

(1) Encodez votre mot de passe de https://www.url-encode-decode.com
(2) Remplacez votre mot de passe par un mot de passe.
(3) Cela devrait bien fonctionner.

Par exemple:
Mot de passe actuel: ABCDEX $ KrrpvDzRTy` @ drf. '; 3X
Mot de passe codé: 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 & ssl = true,

4
prisan

Si vous utilisez le pilote natif Mongodb Node.js, voici ce qui fonctionne pour moi à partir de la version du pilote 3.1. Supposons que votre URL ne contient pas d'informations d'authentification.

MongoClient = require('mongodb').MongoClient;
let options = {
    useNewUrlParser: true,
    auth: {
        user: 'your_usr',
        password: 'your_pwd'
    }
};
MongoClient.connect(url, options, callback);

Ou si vous souhaitez inclure les informations d'authentification dans votre URL, procédez comme suit:

let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
2
toadead

Essayez celui-ci, mes amis:

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: 'abc@123'});

test est mon nom de base de données 
admin est mon db pour l'authentification 
viettd est mon nom d'utilisateur 
abc@123 est mon mot de passe

2
Viet Tran

parfois, vous devez vous connecter à la base de données à l’aide d’autres outils qui acceptent chaîne uniquement en tant que chaîne de connexion. il suffit donc de changer le signe @ avec% 40

1
dang

Aucune des solutions mentionnées ci-dessus n'a fonctionné pour moi. J'ai fait des recherches plus poussées et découvert que je devais inclure le paramètre useNewUrlParser.

mongoose.connect(db, {
    useNewUrlParser : true
    },
    err => {
    if (err){
        console.error('Error: ' + err)
    }
    else{
        console.log('Connected to MongoDb')
    }
})

D'après ce que j'ai compris, vous avez besoin d'une version spécifique de MongoDB pour pouvoir l'utiliser. Pour plus de détails, vérifiez évitez l’avertissement «l’analyseur de chaîne d’URL actuel est obsolète» en définissant useNewUrlParser sur true

Il s’agit de se débarrasser de l’avertissement, mais il est clair que la version affecte également le paramètre requis.

Je n'ai pas testé tous les caractères spéciaux, mais cela fonctionne vraiment avec '@ # $'.

J'espère que cela t'aides.

1
Thierry

Pour ceux qui se connectent avec Mongo Compass. (MacOSx) Allez simplement sur votre cluster -> Security (Tab) sur mongodb.com

 Cluster-Security

Ensuite

modifier votre mot de passe (appuyez sur le bouton d'édition de votre nom d'utilisateur):  enter image description here

Vous obtiendrez une boîte de dialogue modale/popup /: Appuyez sur modifier le mot de passe sous votre nom (le bouton est grisé par défaut mais apparaît juste sous votre nom) -> Puis appuyez sur Mise à jour de l'utilisateur

 EditPassword in Dialog Popup

Suivant:

Fermez votre application mongo db compass si son exécution est la suivante: (quittez Mongo)

 Quit Mongo Compass

L'étape suivante:

Retournez à l’onglet Overview de mongodb.com et sélectionnez Connect

Retour à OverView:  return to overview and select connect

L'étape suivante:

Dans la boîte de dialogue contextuelle, sélectionnez Connect with MongoDB Compass puis, dans la vue suivante, sélectionnez la version à utiliser (de préférence VersionNumber antérieur):  Connect with MongoDB Compass

 select Version

Ensuite:

Copiez la chaîne URI qui vous a été présentée:

 Copy Uri String

Rouvrir l'application MongoDB Compass:

Et cela vous donnera l’option/popup d’utiliser la chaîne d’URI détectée: Cliquez Oui uri string detected

Dernière étape:

Entrez votre nouveau mot de passe et Connect . Votre connexion devrait maintenant être établie.  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%25Doe@Host:port/dbname", function(err, db) {
// password is John%Doe
    }`enter code here`
);
0
Oduwole Oluwasegun

Cette solution nécessite une dépendance supplémentaire, mais c’est ce qui a finalement fonctionné pour moi.

Ajoutez mongodb-uri à votre projet et les lignes suivantes à votre code:

const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)

J'ai trouvé cette suggestion dans le numéro GitHub de mongoose# 6044 .

0
lpacheco