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?
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) {
}
);
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);
Si votre mot de passe comporte des caractères spéciaux:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
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);
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,
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"
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
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
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.
Pour ceux qui se connectent avec Mongo Compass. (MacOSx) Allez simplement sur votre cluster -> Security (Tab) sur mongodb.com
Ensuite
modifier votre mot de passe (appuyez sur le bouton d'édition de votre nom d'utilisateur):
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
Suivant:
Fermez votre application mongo db compass si son exécution est la suivante: (quittez Mongo)
L'étape suivante:
Retournez à l’onglet Overview de mongodb.com et sélectionnez 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):
Ensuite:
Copiez la chaîne URI qui vous a été présentée:
Rouvrir l'application MongoDB Compass:
Et cela vous donnera l’option/popup d’utiliser la chaîne d’URI détectée: Cliquez Oui
Dernière étape:
Entrez votre nouveau mot de passe et Connect . Votre connexion devrait maintenant être établie.
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`
);
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 .