Estoy tratando de conectarme a una base de datos MongoDB con un nombre de usuario y contraseña usando Mongoose en Node.js. Todos los documentos dicen que la cadena de conexión debería verse así
mongodb://username:password@host:port/db
Sin embargo, la contraseña contiene el carácter '@'. ¿Cómo puedo hacer una cadena de conexión con esto que la mangosta entenderá? ¿Puedo escapar de la '@' en la contraseña o hay otro método de conexión que deba usar?
@
de su contraseña debe estar codificado en la URL. El@
carácter codificado es%40
. Sin embargo, el%
carácter también debe estar codificado. Entonces, si su contraseña es, digamos,p@ss
la contraseña codificada final debería serp%2540ss
Respuestas:
Utilice esta sintaxis:
mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { useNewUrlParser: true }, function(err, db) { } );
fuente
{uri_decode_auth: true}
a primera vista, pero funcionó una vez que lo noté. Gracias.{uri_decode_auth: true}
debe pasarse como un objeto separado si está en NodeJS y usa el controlador nativo de mongoDB.Si su contraseña tiene caracteres especiales:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
fuente
Utilice el
options
parámetro de lamongoose.connect
llamada para especificar la contraseña en lugar de incluirla en la cadena de URL:mongoose.connect('mongodb://localhost/test', {user: 'username', pass: 'p@ssword'}, callback);
fuente
Prueba este, amigos míos:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin", {user: 'viettd', pass: 'abc@123'});
test
es mi nombre de base de datosadmin
es mi base de datos para la autenticaciónviettd
es mi nombre de usuarioabc@123
es mi contraseñafuente
use pwd en lugar de pasar, eso me funcionó para la versión3.2
mongoose.connect('mongodb://localhost/test', {user: 'username', pwd: 'p@ssword'}, callback);
fuente
También me he enfrentado al mismo problema. Lo resolví agregando una contraseña codificada en la cadena de conexión. Y funciona muy bien.
(1) Codifique su contraseña de https://www.url-encode-decode.com
(2) Reemplace su contraseña por una codificada.
(3) Debería funcionar bien.
Por ejemplo:
Contraseña real: ABCDEX $ KrrpvDzRTy` @ drf. ';
Contraseña codificada 3X : ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X
mongodb: // usuario1: ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]: 1234, ds1234-test.com: 19889 / mongo-dev? replicaSet = rs-ds123546978 & ssl = true ',
fuente
encodeURIComponent()
es la función incorporada la que puede hacer el trabajo.Si usa el controlador Node.js nativo de Mongodb, esto es lo que me funciona a partir de la versión 3.1 del controlador. Suponga que su URL no contiene información de autenticación.
MongoClient = require('mongodb').MongoClient; let options = { useNewUrlParser: true, auth: { user: 'your_usr', password: 'your_pwd' } }; MongoClient.connect(url, options, callback);
O si desea incluir información de autenticación en su URL, haga esto:
let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
fuente
Ninguna de las soluciones mencionadas anteriormente funcionó para mí. Lo investigué más y descubrí que tenía que incluir el parámetro useNewUrlParser.
mongoose.connect(db, { useNewUrlParser : true }, err => { if (err){ console.error('Error: ' + err) } else{ console.log('Connected to MongoDb') } })
Por lo que tengo entendido, necesita una versión específica de MongoDB para poder usar esto. Para obtener más detalles, marque la advertencia Evitar que el analizador de cadenas de URL actual esté obsoleto estableciendo useNewUrlParser en verdadero
Es para deshacerse de la advertencia pero claramente la versión también afecta el parámetro requerido.
No he probado todos los caracteres especiales, pero definitivamente funciona con '@ # $'.
Espero que esto ayude.
fuente
a veces necesita conectarse a la base de datos utilizando otras herramientas que aceptan cadenas solo como cadena de conexión. así que solo cambia el signo @ con% 40
fuente
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` );
fuente
Esta solución requiere una dependencia adicional, pero fue lo que finalmente funcionó para mí.
Agregue
mongodb-uri
a su proyecto y las siguientes líneas a su código:const mongoose = require('mongoose') const mongodbUri = require('mongodb-uri') let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri) mongoose.connect(mongooseUri, config.mongo.options)
Encontré esta sugerencia en
mongoose
el número de GitHub # 6044 .fuente
Para aquellos que se conectan con Mongo Compass. ( MacOSx ) Simplemente vaya a su clúster -> Seguridad (pestaña) en mongodb.com
Entonces
edite su contraseña (presione el botón editar en su nombre de usuario):
Obtendrá un cuadro de diálogo modal / emergente: presione editar contraseña debajo de su nombre (el botón está atenuado de forma predeterminada, pero aparece justo debajo de su nombre) -> Luego presione Actualizar usuario
Siguiente :
Cierre su aplicación mongo db compass si se está ejecutando: (Salga de Mongo)
Próximo paso:
Regrese a la pestaña Descripción general en mongodb.com y seleccione Conectar
Volver a Vista general:
Próximo paso:
En el cuadro de diálogo emergente, seleccione Conectar con MongoDB Compass y luego, en la siguiente vista, seleccione la versión que desee usar (preferiblemente VersionNumber anterior ):
Entonces:
Copie la cadena URI que se le presentó:
Vuelva a abrir la aplicación MongoDB Compass:
Y le dará la opción / ventana emergente para usar la cadena URI detectada: haga clic en Sí
Último paso:
Ingrese su nueva contraseña y Conéctese . Ahora su conexión debería ser exitosa.
fuente
Utilizar esta,
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true}).then(()=>console.log("DB connected"));
fuente
Si el nombre de usuario o la contraseña incluyen el signo @, dos puntos:, barra inclinada / o el carácter% del signo de porcentaje, utilice la codificación de porcentaje .
Documentos de Mongo: https://docs.mongodb.com/manual/reference/connection-string/
fuente
Estaba intentando esto en Python y tuve un error similar. Esto funcionó para mí.
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 representa su contraseña y asume que tiene un carácter especial (por ejemplo, @ - representado por% 40) - nombre de usuario es su nombre de usuario mongodb, ip - su dirección IP y sample_db la base de datos bajo mongodb a la que desea conectarse.
fuente
Este funcionó para mi
Esta es una actualización de MongoDB 2020.Si está utilizando un archivo env separado, simplemente agregue su
mongoose.connect('url', { useNewUrlParser: true, useUnifiedTopology: true });
fuente