122 votes

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 en utilisant Mongoose dans Node.js. Tous les documents indiquent que la chaîne de connexion doit ressembler à ceci

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

Cependant, le mot de passe contient le caractère '@'. Comment puis-je en faire une chaîne de connexion que la mangouste pourra comprendre ? Puis-je échapper le caractère '@' du mot de passe ou dois-je utiliser une autre méthode de connexion ?

0 votes

L'avez-vous essayé ? Peut-être qu'il utilise le dernier @ qu'il trouve.

1 votes

Non, ça ne marche pas. Les coder en %40 ne fonctionne pas non plus.

4 votes

Je vous recommande de changer le mot de passe pour un qui n'inclut pas le caractère @.

195voto

Andrey Hohutkin Points 1894

Utilisez cette syntaxe :

// use %40 for @
mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { 
        useNewUrlParser: true
    }, function(err, db) {

    }
);

15 votes

Cette réponse devrait être plus appréciée, il suffit de convertir le symbole @ en %40 pour que cela fonctionne.

4 votes

J'ai manqué le {uri_decode_auth: true} à première vue, mais ça a marché une fois que je l'ai remarqué. Merci.

1 votes

Pour les novices, {uri_decode_auth: true} doit être transmis en tant qu'objet séparé si vous êtes en NodeJS et que vous utilisez le pilote natif de mongoDB.

86voto

vanduc1102 Points 1972

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

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

9 votes

C'est la réponse qui devrait être la plus appréciée, car elle résout l'ensemble du problème, et pas seulement le cas très spécifique de l'OP.

1 votes

Cela fonctionne très bien, juste pour info si quelqu'un l'a manqué, vous devez toujours passer {useNewUrlParser : true} comme deuxième argument lors de la connexion avec mongoose.connect().

1 votes

Cela devrait vraiment être la réponse acceptée car cela prend en charge la cause première -- les caractères spéciaux dans le pass/username nécessitent un encodage car la chaîne de connexion mongo utilise la spécification URI. RFC2396

32voto

JohnnyHK Points 61191

Utilisez le options du paramètre mongoose.connect 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);

1 votes

J'aime cette approche car taper une ligne de plus ne fait pas de mal.

7voto

VietTD Points 11

Essayez celui-là, mes amis :

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

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

5voto

AKASH Points 188

Utilisez pwd au lieu de pass, cela a marché pour moi pour la version3.2

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X