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 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 au «@» dans le mot de passe ou y a-t-il une autre méthode de connexion que je dois utiliser?
@
de votre mot de passe doit être encodé dans l'URL. Le@
caractère encodé est%40
. Cependant, le%
caractère doit également être encodé. Donc, si votre mot de passe est, disons,p@ss
le mot de passe codé final devrait êtrep%2540ss
Réponses:
Utilisez cette syntaxe:
mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { useNewUrlParser: true }, function(err, db) { } );
la source
{uri_decode_auth: true}
premier coup d'œil, mais cela a fonctionné une fois que j'ai remarqué cela. Merci.{uri_decode_auth: true}
doit être passé comme un objet séparé si vous êtes dans NodeJS et que vous utilisez le pilote natif de mongoDB.Si votre mot de passe comporte des caractères spéciaux:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
la source
Utilisez le
options
paramètre de l'mongoose.connect
appel pour spécifier le mot de passe au lieu de l'inclure dans la chaîne d'URL:mongoose.connect('mongodb://localhost/test', {user: 'username', pass: 'p@ssword'}, callback);
la source
Essayez celui-ci, mes amis:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin", {user: 'viettd', pass: 'abc@123'});
test
est mon nom deadmin
base de donnéesviettd
est mon nom de base de données pour l'authentification est mon nom d'utilisateurabc@123
est mon mot de passela source
utilisez pwd à la place, cela a fonctionné pour moi pour la version3.2
mongoose.connect('mongodb://localhost/test', {user: 'username', pwd: 'p@ssword'}, callback);
la source
J'ai également été confronté au même problème. J'ai résolu en ajoutant un mot de passe codé dans la chaîne de connexion. Et cela fonctionne très bien.
(1) Encodez votre mot de passe depuis https://www.url-encode-decode.com
(2) Remplacez votre mot de passe par un encodé.
(3) Cela devrait bien fonctionner.
Par exemple:
Mot de passe réel: ABCDEX $ KrrpvDzRTy` @ drf. ';
Mot de passe codé 3X : ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X
mongodb: // utilisateur1: ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]: 1234, ds1234-test.com: 19889 / mongo-dev? replicaSet = rs-ds123546978 & ssl = true ',
la source
encodeURIComponent()
c'est la fonction intégrée qui peut faire le travail.Si vous utilisez le pilote Node.js natif de Mongodb, c'est ce qui fonctionne pour moi à partir de la version 3.1 du pilote. Supposons que votre URL ne contienne 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 des informations d'authentification dans votre URL, procédez comme suit:
let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
la source
Aucune des solutions mentionnées ci-dessus n'a fonctionné pour moi. J'ai fait des recherches plus approfondies et j'ai 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 je comprends, vous avez besoin d'une version spécifique de MongoDB pour l'utiliser. Pour plus de détails, vérifiez l' avertissement "Éviter 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 définitivement avec '@ # $'.
J'espère que cela t'aides.
la source
Parfois, vous devez vous connecter à la base de données à l'aide d'autres outils qui n'acceptent la chaîne que comme chaîne de connexion. alors changez simplement le signe @ avec% 40
la source
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` );
la source
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
mongoose
le numéro 6044 de GitHub .la source
Pour ceux qui se connectent à Mongo Compass. ( MacOSx ) Accédez simplement à votre cluster -> Sécurité (onglet) sur mongodb.com
ensuite
modifiez votre mot de passe (appuyez sur le bouton modifier de votre nom d'utilisateur):
Vous obtiendrez un modal / popup / dialogue: 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 Mettre à jour l'utilisateur
Suivant :
Fermez votre application mongo db compass si elle est en cours d'exécution: (Quittez Mongo)
L'étape suivante:
Revenez à l'onglet Présentation sur mongodb.com et sélectionnez Se connecter
Revenir à OverView:
L'étape suivante:
Dans la boîte de dialogue contextuelle, sélectionnez Se connecter avec MongoDB Compass, puis dans la vue suivante, sélectionnez une version que vous souhaitez utiliser (de préférence Numéro de version plus tôt ):
Ensuite:
Copiez la chaîne URI qui vous est présentée:
Rouvrir l'application MongoDB Compass:
Et il vous donnera l'option / popup pour utiliser la chaîne URI détectée: Cliquez sur Oui
Dernière étape:
Entrez votre nouveau mot de passe et connectez - vous . Votre connexion devrait maintenant être réussie.
la source
Utilisez ceci,
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true}).then(()=>console.log("DB connected"));
la source
Si le nom d'utilisateur ou le mot de passe inclut le signe arobase @, deux-points:, barre oblique / ou le caractère% signe%, utilisez le codage en pourcentage .
Mongo Docs: https://docs.mongodb.com/manual/reference/connection-string/
la source
J'essayais cela en python et j'ai eu une erreur similaire. Cela a fonctionné pour moi.
import pymongo client = pymongo.MongoClient("mongodb://username:12%40password@ip:27017/sample_db") db = client.sample_db # print the number of documents in a collection print(db.collection.count())
12% 40password représente votre mot de passe et suppose qu'il a un caractère spécial (par exemple @ - représenté par% 40) - username est votre nom d'utilisateur mongodb, ip - votre adresse IP et sample_db la base de données sous mongodb à laquelle vous souhaitez vous connecter.
la source
Celui-ci a fonctionné pour moi
Celui-ci est une mise à jour MongoDB 2020 Si vous utilisez un fichier env séparé, ajoutez simplement votre
mongoose.connect('url', { useNewUrlParser: true, useUnifiedTopology: true });
la source