Mongoose: Используйте MongoClient.connect () вместо Authenticate (), если пользователь предоставляет URI, чтобы избежать устаревания Db.prototype.authenticate

Созданный на 28 мая 2017  ·  34Комментарии  ·  Источник: Automattic/mongoose

Я использую такой способ подключения:

var Mongoose = require('mongoose');
connectionUrl = mongodb://some_login:some_pwd<strong i="6">@some_host</strong>:27017/some_db?authSource=admin
Mongoose.connect(connectionUrl); 

... как указано в документации , но на консоли NodeJS появляется следующее предупреждение :

Db.prototype.authenticate method will no longer be available 
in the next major release 3.x as MongoDB 3.6 will only allow auth 
against users in the admin db and will no longer allow multiple credentials on a socket. 
Please authenticate using MongoClient.connect with auth credentials.

Connection with database succeeded.

(Если я пропущу ?authSource=admin меня возникнет ошибка аутентификации)

Это нормально на данном этапе (нужно ли ждать следующего выпуска мангуста?),или что мне теперь изменить?

Версии:

Узел: 7.10.0
Мангуст: 4.10.3
MongoDB: 3.4

Спасибо.

confirmed-bug underlying library issue

Самый полезный комментарий

пожалуйста, не комментируйте просто +1 мы четко ответили на это, заявив, что это не критическая ошибка, пометив проблему как confirmed-bug , и что все будет в порядке до mongoose 4.11. Это просто предупреждающее сообщение, и я даже опубликовал способ, чтобы вы могли использовать регистратор mongodb, чтобы скрыть сообщение, если вы хотите его отключить. Я не хочу показаться идиотом, но сообщения +1 просто наводняют наши почтовые ящики, что особенно раздражает, когда чтение ветки показывает, что проблема решена.

Все 34 Комментарий

+1

+1

+1
Mac OS X 10.12.5
Узел: v7.10.0
Мангуст: 4.10.3
MongoDB v3.4.4

+1

да, похоже, это происходит только тогда, когда вы действительно касаетесь базы данных, чтобы выполнить какую-то операцию (например, запись):

Я создал пользователя в базе данных администратора с именем gh_5304 (с тем же паролем) и предоставил пользователю dbAdminAnyDatabase привилегии, а затем прошел проверку подлинности этого пользователя в строке подключения для gh-5304 table с указанием таблицы admin в качестве authSource:

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5304`;


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${ error }\n${ error.stack }`);
  });


function exec() {
  return co(function*() {
    const db = mongoose.connect(`mongodb://gh_5304:gh_5304<strong i="11">@localhost</strong>:27017/${ GITHUB_ISSUE }?authSource=admin`);

    const schema = new mongoose.Schema({ name: String });

    const Model = db.model('Model', schema);

    const doc = yield Model.create({ name: 'Test' });
  });
}

Вывод журнала:

Db.prototype.authenticate method will no longer be available in the next major release 3.x
as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow
multiple credentials on a socket. Please authenticate using MongoClient.connect with auth c
redentials.
successfully ran program

Я отмечу это как «ошибку», хотя, честно говоря, я не уверен, как бы это описать. Это определенно предупреждение, к которому следует прислушаться ...

Проблема authSource - это ожидаемое поведение atm, если вы подключаетесь к some_db и ваш пользователь не определен в базе данных some_db , вам необходимо указать authSource .

Re: предупреждение, это то, что мангусту придется тщательно обойти, потому что это единственный способ аутентификации мангуста прямо сейчас. Даже если вы укажете учетные данные в MongoClient.connect (), мангуст все равно вызовет authenticate() под капотом. Прямо сейчас план состоит в том, чтобы заставить 4.11 использовать MongoClient.connect() если вы просто предоставляете URI, или вернуться к логике внутреннего соединения мангуста, если вы используете хост, пользователя и т. Д.

До 4.11 я бы не беспокоился об этом предупреждении. Насколько мне известно, MongoDB 3.6 и драйвер MongoDB 3.0 вряд ли будут выпущены намного позже в этом году, и эти изменения не потребуют каких-либо изменений конечного пользователя.

Спасибо @varunjayaraman @ vkarpov15 за подробные ответы;)

Кто-нибудь знает, как отключить / скрыть это сообщение? Я все время вижу, как это возникает, когда я запускаю процесс, и это действует мне на нервы! 😅

У меня такая же проблема.

У меня такая же проблема. Я не знаю, использовать мангуста или нет.

+1

та же проблема здесь

+1

+1
Мангуст: 4.10.3
MongoDB v3.4

если вы хотите отключить предупреждения от драйвера mongodb до 4.11, вы можете попробовать выполнить шаги, описанные здесь, и использовать базовый клиент от mongoose для настройки регистратора:

http://mongodb.github.io/node-mongodb-native/2.2/reference/management/logging/

в противном случае все будет в порядке, и проблема должна быть решена в 4.11

+1

const mongoose = require ('мангуст');
var db = mongoose.connect ("mongodb: // saiganesh: [email protected]: 61121 / tester");

var Scheme = mongoose.Schema ({
название: Строка,
автор: String,
тело: Строка,
комментарии: [{body: String, date: Date}],
date: {type: Date, по умолчанию: Date.now},
скрытый: логический,
meta: {
голосов: Число
избранное: Число
}
});
module.exports = db.model ('mongodb', Схема);

var BlogPost = require ("./ models / mongodb.js");

// создаем новую модель
var post = new BlogPost ({title: "Моя первая запись", автор: "saiganesh",
body: "Мы хотим сделать документацию устаревшей"});

post.save (function (err) {
if (err) {
return err;
}
else {
console.log («Сообщение сохранено»);
}
});

ошибка:

node .index.js (node: 2604) DeprecationWarning: Mongoose: mpromise (мангуста де
библиотека обещаний ошибок) устарела, вместо этого подключите свою собственную библиотеку обещаний: http://mongoosejs.com/docs/promises.html
Метод Db.prototype.authenticate больше не будет доступен в следующем основном выпуске 3.x, поскольку MongoDB 3.6 разрешит аутентификацию только для пользователей в админке.
db и больше не будет разрешать использование нескольких учетных данных для сокета. Пожалуйста, авторизуйтесь с помощью MongoClient.connect с учетными данными авторизации.

events.js: 160
бросить эр; // Необработанное событие 'ошибка'
^
MongoError: Ошибка аутентификации.
в Function.MongoError.create (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js: 31: 11)
в C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 497: 72
в AuthenticateStragglers (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 443:
16)
в Connection.messageHandler (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 4
77: 5)
в Socket.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
в emitOne (events.js: 96: 13)
в Socket.emit (events.js: 188: 7)
в readableAddChunk (_stream_readable.js: 176: 18)
в Socket.Readable.push (_stream_readable.js: 134: 10)
в TCP.onread (net.js: 548: 20)

Какую версию MongoDB и Mongoose мне следует использовать, чтобы избежать этой ошибки?

это ошибка?

У меня такая же проблема. Версия оболочки MongoDB v3.4.2
зависимости в пакете json: "mongodb": "^ 2.2.28", "mongoose": "^ 4.10.4"

"мангуст": "~ 4.10.2", это работа!

Хорошо, теперь я удалил папки node_module и изменил package.json, чтобы использовать исправленную старую версию «mongoose»: «4.10.2». После установки npm предупреждающее сообщение исчезнет:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Боюсь, это не лучший подход. Между последними версиями программного обеспечения mongoose и mongo должна быть совместимость.

Да жду исправления ошибок может в следующей версии

пожалуйста, не комментируйте просто +1 мы четко ответили на это, заявив, что это не критическая ошибка, пометив проблему как confirmed-bug , и что все будет в порядке до mongoose 4.11. Это просто предупреждающее сообщение, и я даже опубликовал способ, чтобы вы могли использовать регистратор mongodb, чтобы скрыть сообщение, если вы хотите его отключить. Я не хочу показаться идиотом, но сообщения +1 просто наводняют наши почтовые ящики, что особенно раздражает, когда чтение ветки показывает, что проблема решена.

Что касается вашей проблемы кажется отдельной проблемой, связанной с вашей аутентификацией db. Не могли бы вы поднять отдельный вопрос?

+2 (для меня и моего коллеги)

"мангуст": "^ 4.10.4"

Я тоже получаю эту ошибку - я так понимаю, это просто предупреждающее сообщение, а не ошибка, и не мешает мне продолжить?

Метод Db.prototype.authenticate больше не будет доступен в следующем основном выпуске 3.x, поскольку MongoDB 3.6 разрешит аутентификацию только для пользователей в базе данных администратора и больше не будет разрешать использование нескольких учетных данных в сокете. Пожалуйста, авторизуйтесь с помощью MongoClient.connect с учетными данными авторизации.

Я пытаюсь подключиться к базе данных mlab с помощью мангуста. Я пробовал установить более старые версии мангуста.

Я продолжаю получать эту ошибку, когда запускаю npm start в своем приложении MEAN. Я не могу запустить приложение. Кто-нибудь может помочь?

Пожалуйста, прочтите проблему полностью, прежде чем отправлять вопрос, на который уже дан ответ, и непреднамеренно отправлять электронное письмо всем, кто подписался на обновления по этой проблеме.

Интересно, как ты это решил? @JonathanBristow

Я v read these comments in this page but I still can т исправлю эту проблему !! не могли бы вы проверить мой код?

это мой код подключения:

mongoose.Promise = require ('bluebird');
mongoose.connect ("mongodb: //:@ cluster0-shard-00-00-xlnqd.mongodb. сеть: 27017 , cluster0-shard-00-01-xlnqd.mongodb. сеть: 27017 , cluster0-shard-00-02-xlnqd.mongodb. сеть: 27017 /? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin ", function (err) {
if (err) {
console.log (ошибка);
} else {
console.log ('успешно подключился к базе данных.');
}
});

и я получил это предупреждение:
"Метод Db.prototype.authenticate больше не будет доступен в следующем
основной выпуск 3.x, поскольку MongoDB 3.6 разрешает авторизацию только для пользователей в
admin db и больше не будет разрешать использование нескольких учетных данных в сокете. пожалуйста
аутентифицироваться с помощью MongoClient.connect с учетными данными ".

@thinkdiff ... это warning , а не error . Предупреждение обычно указывает на то, что не нарушит код. По-английски: нет ничего структурно неправильного, не беспокойтесь об этом.

Я временно блокирую эту проблему, чтобы предотвратить продолжение спама. Будет опция, которая отключит это предупреждение в 4.11, которое будет выпущено на этой неделе, исключая любые непредвиденные задержки. Невозможно обойти это предупреждение в 4.10.x. Спасибо за терпеливость.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги