Подтвердить что ты не робот

Пароль MongoDB с "@" в нем

Я пытаюсь подключиться к базе данных MongoDB с именем пользователя и паролем, используя Mongoose в Node.js. Все документы говорят, что строка подключения должна выглядеть как

  mongodb://username:[email protected]:port/db

Однако пароль содержит символ "@". Как я могу сделать строку соединения из этого, что поймут мангуста? Могу ли я избежать "@" в пароле или есть ли другой способ подключения, который я должен использовать?

4b9b3361

Ответ 1

Используйте этот синтаксис:

mongoClient.connect("mongodb://username:p%[email protected]:port/dbname?authSource=admin", { 
        useNewUrlParser: true
    }, function(err, db) {

    }
);

Ответ 2

Если ваш пароль содержит специальные символы:

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

Ответ 3

Используйте параметр options вызова mongoose.connect, чтобы указать пароль, а не включать его в строку URL:

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: '[email protected]'},
                 callback);

Ответ 4

Я также столкнулся с той же проблемой. Я решил, добавив зашифрованный пароль в строку подключения. И это работает очень хорошо.

(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%[email protected]:1234,ds1234-test.com:19889/mongo-dev?replicaSet=rs-ds123546978&ssl=true',

Ответ 5

используйте pwd вместо pass, который работал у меня для версии3.2

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: '[email protected]'},
                 callback);

Ответ 6

Попробуйте это, друзья:

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: '[email protected]'});

test - мое имя db
admin является моим db для аутентификации
viettd - мое имя пользователя
[email protected] - мой пароль

Ответ 7

Ни одно из упомянутых выше решений не помогло мне. Я исследовал это дальше и обнаружил, что мне нужно было включить параметр useNewUrlParser.

mongoose.connect(db, {
    useNewUrlParser : true
    },
    err => {
    if (err){
        console.error('Error: ' + err)
    }
    else{
        console.log('Connected to MongoDb')
    }
})

Из того, что я понимаю, вам нужна определенная версия MongoDB, чтобы использовать это. Подробнее см. в разделе Избегать предупреждения о том, что текущий анализатор строк URL устарел, установив для useNewUrlParser значение true

.Это избавление от предупреждения, но версия также влияет на требуемый параметр.

Я не проверял все специальные символы, но он определенно работает с '@# $'.

Надеюсь это поможет.

Ответ 8

Если вы используете собственный драйвер 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("[email protected]") + "@localhost:27017/database"

Ответ 9

иногда вам нужно подключиться к БД с помощью других инструментов, которые принимают строку только как строку подключения. поэтому просто измените знак @на% 40

Ответ 10

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%[email protected]:port/dbname", function(err, db) {
// password is John%Doe
    }'enter code here'
);

Ответ 11

Это решение требует дополнительной зависимости, но в конечном итоге это сработало для меня.

Добавьте 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.

Ответ 12

Для тех, кто соединяется с Mongo Compass. (MacOSx) Просто перейдите в свой кластер ->Безопасность(вкладка) на mongodb.com

Cluster-Security

Тогда

измените свой пароль (нажмите кнопку редактирования на вашем имени пользователя): enter image description here

Вы получите модальное/всплывающее окно/диалоговое окно: нажмите "Изменить пароль" под вашим именем (по умолчанию кнопка неактивна, но отображается под вашим именем) → Затем нажмите Обновить пользователя

.EditPassword in Dialog Popup

Далее:

Закройте приложение mongo db compass, если оно запущено: (Выход из Mongo)

Quit Mongo Compass

Следующий шаг:

Вернитесь на вкладку "Обзор" на сайте mongodb.com и выберите Connect

.Вернуться в OverView: return to overview and select connect

Следующий шаг:

В появившемся диалоговом окне выберите Connect with MongoDB Compass, а затем в следующем представлении выберите версию, которую вы хотите использовать (предпочтительно VersionNumber ранее): Connect with MongoDB Compass

select Version

Тогда:

Скопируйте строку URI, представленную вам:

Copy Uri String

Откройте приложение MongoDB Compass:

И это даст вам возможность/всплывающее окно для использования обнаруженной строки URI: нажмите Да uri string detected

Последний шаг:

Введите новый пароль и подключите. Теперь ваше соединение должно быть успешным.Enter new password and Connect