Пароль MongoDB с "@" в нем
Я пытаюсь подключиться к базе данных MongoDB с помощью имени пользователя и пароля, используя Mongoose в Node.js. Все документы говорят, что строка подключения должна выглядеть так
mongodb://username:password@host:port/db
Однако пароль содержит символ "@". Как я могу сделать строку подключения из этого, что мангуст поймет? Могу ли я избежать "@" в пароле или есть другой способ подключения, который я должен использовать?
18 ответов
Используйте этот синтаксис, не забывайте uri_decode_auth
вариант.
mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname", {
uri_decode_auth: true
}, function(err, db) {
}
);
Если ваш пароль содержит специальные символы:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
Использовать options
параметр mongoose.connect
вызовите, чтобы указать пароль, а не включать его в строку URL:
mongoose.connect('mongodb://localhost/test',
{user: 'username', pass: 'p@ssword'},
callback);
Попробуйте это, друзья мои:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
{user: 'viettd', pass: 'abc@123'});
test
мое имя БД admin
мой БД для аутентификации viettd
мое имя пользователя abc@123
мой пароль
Я также столкнулся с той же проблемой. Я решил, добавив зашифрованный пароль в строку подключения. И это работает просто хорошо.
(1) Кодируйте свой пароль с https://www.url-encode-decode.com/
(2) Замените ваш пароль на зашифрованный.
(3) Это должно работать хорошо.
Например:
Фактический пароль: ABCDEX$KrrpvDzRTy`@drf.';3X
Кодированный пароль: ABCDEX%24KrrpvDzRTy%60%40drf.%27%3B3X
MongoDB://user1:ABCDEX%24KprpvDzRTy%60%40drf.%27%3B3X@dstest.com:1234,ds1234-test.com:19889/ Монго-DEV replicaSet= RS-ds123546978& = SSL правда",
Используйте pwd вместо pass, у меня сработало для версии 3.2
mongoose.connect('mongodb://localhost/test',
{user: 'username', pwd: 'p@ssword'},
callback);
Если вы используете собственный драйвер Mongodb Node.js, это то, что мне подходит для версии драйвера 3.1. Предположим, что ваш URL не содержит информацию об аутентификации.
MongoClient = require('mongodb').MongoClient;
let options = {
useNewUrlParser: true,
auth: {
user: 'your_usr',
password: 'your_pwd'
}
};
MongoClient.connect(url, options, callback);
Или, если вы хотите включить информацию об аутентификации в ваш URL, сделайте это:
let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
Ни одно из упомянутых выше решений не помогло мне. Я исследовал это дальше и обнаружил, что мне пришлось включить параметр useNewUrlParser.
mongoose.connect(db, {
useNewUrlParser : true
},
err => {
if (err){
console.error('Error: ' + err)
}
else{
console.log('Connected to MongoDb')
}
})
Из того, что я понимаю, вам нужна конкретная версия MongoDB, чтобы использовать это. Для получения более подробной информации, установите флажок "Предупреждение о том, что текущий анализатор строк URL устарел", установив для useNewUrlParser значение true
Это избавление от предупреждения, но ясно, что версия также влияет на требуемый параметр.
Я не проверял все специальные символы, но он определенно работает с '@#$'.
Надеюсь это поможет.
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`
);
Иногда вам нужно подключиться к БД, используя другие инструменты, которые принимают строку только как строку подключения. так что просто поменяйте знак @ на%40
Для тех, кто подключается с Mongo Compass. (MacOSx) Просто перейдите в ваш кластер -> Безопасность (вкладка) на mongodb.com
затем
измените свой пароль (нажмите кнопку редактирования на вашем имени пользователя):
Вы получите модальное / всплывающее окно / диалоговое окно: нажмите "Изменить пароль" под вашим именем (по умолчанию кнопка неактивна, но отображается под вашим именем)-> Затем нажмите " Обновить пользователя".
Далее:
Закройте приложение mongo db compass, если оно запущено:(Выход из Mongo)
Следующий шаг:
Вернитесь на вкладку "Обзор" на сайте mongodb.com и выберите " Подключиться".
Вернуться в OverView:
Следующий шаг:
Во всплывающем диалоговом окне выберите " Подключиться к MongoDB Compass", затем в следующем представлении выберите версию, которую вы хотите использовать (предпочтительно, " VersionNumber ранее"):
Затем:
Скопируйте представленную вам строку URI:
Откройте приложение MongoDB Compass:
И это даст вам возможность / всплывающее окно для использования обнаруженной строки URI: Нажмите Да
Заключительный этап:
Введите новый пароль и подключитесь. Теперь ваше соединение должно быть успешным.
Это решение требует дополнительной зависимости, но это было то, что в итоге сработало для меня.
добавлять mongodb-uri
к вашему проекту и следующие строки к вашему коду:
const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)
Я нашел это предложение в mongoose
GitHub выпуск № 6044.
Я пытался это сделать на Python, и у меня была аналогичная ошибка. Это сработало для меня.
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 представляет ваш пароль и предполагает, что он имеет специальный символ (например, @ - представлен%40) - username - это ваше имя пользователя mongodb, ip - ваш IP-адрес и sample_db - база данных в mongodb, к которой вы хотите подключиться.
Использовать это,
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true}).then(()=>console.log("DB connected"));
Если имя пользователя или пароль включает знак @, двоеточие:, косую черту / или знак процента%, используйте процентное кодирование.
Документы Mongo:https://docs.mongodb.com/manual/reference/connection-string/
По-видимому, я столкнулся с чем-то похожим, но я не смог найти другого пути, кроме как избегать использования специальных символов в пароле. Я пробовал другие специальные символы (^% &), ни один из них не работает с паролем в строке URL. Но в документе MongoDB говорится только
: / ? # [ ] @
эти символы должны быть закодированы в процентах.
Я пробовал кодировать большинство из них в своих комбинациях паролей, но ни один из них не работает.
Это сработало для меня
Это обновление MongoDB 2020. Если вы используете отдельный файл env, просто добавьте свой
mongoose.connect('url',
{
useNewUrlParser: true,
useUnifiedTopology: true
});
Чтобы подключиться к базе данных MongoDB и избежать проблем со специальными символами, такими как «@», в вашем пароле, у вас есть несколько вариантов:
Измените свой пароль. Самый простой способ — изменить пароль MongoDB на тот, который не содержит специальных символов. Это поможет вам избежать осложнений в строке подключения.
encodeURIComponent: если вам нужно сохранить в пароле специальные символы, вы можете использовать
encodeURIComponent
функция в JavaScript для кодирования вашего пароля. Вот как вы можете использовать его в строке подключения:const username = 'your_username'; const password = 'your@password'; // Note the special character "@" in the password const encodedPassword = encodeURIComponent(password); const connectionString = `mongodb://${username}:${encodedPassword}@your-mongodb-host:27017/your-database`;