Contraseña de MongoDB con “@” en ella

Estoy intentando 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

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

Sin embargo, la contraseña contiene el carácter ‘@’. ¿Cómo puedo hacer una cadena de conexión de esto que la mongoose entenderá? ¿Puedo escapar de la ‘@’ en la contraseña o hay otro método de conexión que debo usar?

Use esta syntax, no olvide la opción uri_decode_auth .

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

Use el parámetro de options de la llamada mongoose.connect para especificar la contraseña en lugar de incluirla en la cadena URL:

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

Si su contraseña tiene caracteres especiales:

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

use pwd en su lugar pase, eso funcionó para mí para la versión3.2

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

a veces necesita conectarse a la base de datos utilizando otras herramientas que acepten una cadena solo como cadena de conexión. así que simplemente cambie el signo @ con% 40

También me he enfrentado al mismo problema. Lo he resuelto agregando una contraseña codificada en la cadena de conexión. Y funciona muy bien.

(1) Codifique su contraseña desde https://www.url-encode-decode.com (2) Reemplace su contraseña por una codificada. (3) Debería funcionar bien.

Por ejemplo: Contraseña actual: ABCDEX $ KrrpvDzRTy` @ drf. ‘; 3X Contraseña codificada: ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X

mongodb: // user1: ABCDEX%24KprpvDzRTy%60%40drf.%27%3B3X@dstest.com: 1234, ds1234-test.com: 19889 / mongo-dev? replicaSet = rs-ds123546978 & ssl = true ‘,

Prueba este, mis amigos:

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

test es mi nombre db
admin es mi el DB para autenticar
viettd es mi nombre de usuario
abc@123 es mi contraseña

 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` ); 

Ninguna de las soluciones mencionadas anteriormente funcionó para mí. 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 entiendo, necesitas una versión específica de MongoDB para usar esto. Para obtener más detalles, marque la casilla Evitar que el analizador de cadenas URL actual esté en desuso estableciendo useNewUrlParser en true

Es para deshacerse de la advertencia, pero claramente la versión también afecta el parámetro requerido.

No he probado todos los personajes especiales, pero definitivamente funciona con ‘@ # $’.

Espero que esto ayude.