Mongoose: Verwenden Sie MongoClient.connect () anstelle von authenticate (), wenn der Benutzer einen URI bereitstellt, um zu vermeiden, dass Db.prototype.authenticate veraltet ist

Erstellt am 28. Mai 2017  ·  34Kommentare  ·  Quelle: Automattic/mongoose

Ich verwende eine Verbindungsmethode wie:

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

... wie in den Dokumenten angegeben , aber auf der NodeJS-Konsole die folgende Warnung angezeigt wird:

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.

(Ich erhalte einen Authentifizierungsfehler, wenn ich ?authSource=admin weglasse.)

Ist das zu diesem Zeitpunkt normal (müssen wir auf eine nächste Mungo-Veröffentlichung warten?),oder was soll ich ab jetzt ändern?

Versionen:

Knoten: 7.10.0
Mungo: 4.10.3
MongoDB: 3.4

Vielen Dank.

confirmed-bug underlying library issue

Hilfreichster Kommentar

Bitte kommentieren Sie nicht nur +1 Wir haben darauf klar reagiert und festgestellt, dass es sich nicht um einen Fehler handelt, der das Problem als confirmed-bug markiert und dass es Ihnen bis Mungo 4.11 gut gehen sollte. Es ist einfach eine Warnmeldung und ich habe sogar eine Möglichkeit veröffentlicht, dass Sie den Mongodb-Logger verwenden können, um die Nachricht auszublenden, wenn Sie sie stummschalten möchten. Ich will kein Arsch sein, aber die +1 Nachrichten überfluten einfach unsere Posteingänge, was besonders ärgerlich ist, wenn das Lesen des Threads zeigt, dass das Problem behoben wurde

Alle 34 Kommentare

+1

+1

+1
Mac OS X 10.12.5
Knoten: v7.10.0
Mungo: 4.10.3
MongoDB v3.4.4

+1

yup sieht so aus, als ob es nur passiert, wenn Sie tatsächlich die Datenbank berühren, um eine Operation auszuführen (wie ein Schreibvorgang):

Ich habe in der Admin-Datenbank einen Benutzer mit dem Namen gh_5304 (mit demselben Kennwort) erstellt, dem Benutzer dbAdminAnyDatabase Berechtigungen erteilt und mich dann in der Verbindungszeichenfolge für gh-5304 gegen diesen Benutzer authentifiziert Tabelle, in der die Tabelle admin als authSource angegeben ist:

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' });
  });
}

Protokollausgabe:

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

Ich werde dies als "Fehler" markieren, obwohl ich nicht sicher bin, wie ich das beschreiben würde. Es ist definitiv eine Warnung, die beachtet werden sollte ...

Das Problem authSource ist das erwartete Verhalten atm. Wenn Sie eine Verbindung zu some_db und Ihr Benutzer nicht in der Datenbank some_db , müssen Sie authSource angeben.

Betreff: Die Warnung, dies ist etwas, das Mungo sorgfältig umgehen muss, da dies die einzige Möglichkeit ist, wie Mungo-Authentifizierung derzeit funktioniert. Selbst wenn Sie in MongoClient.connect () Anmeldeinformationen angeben, ruft Mungo unter der Haube immer noch authenticate() auf. Derzeit ist geplant, 4.11 MongoClient.connect() wenn Sie nur einen URI angeben, oder auf die interne Verbindungslogik von Mungo zurückzugreifen, wenn Sie Host, Benutzer usw. verwenden.

Bis 4.11 würde ich mir über diese Warnung keine Sorgen machen. Nach meinem besten Wissen werden MongoDB 3.6 und MongoDB-Treiber 3.0 wahrscheinlich erst viel später in diesem Jahr veröffentlicht, und für diese Änderungen sind keine Änderungen durch den Endbenutzer erforderlich.

Danke @varunjayaraman @ vkarpov15 für deine detaillierten Antworten;)

Kennt jemand eine Möglichkeit, diese Nachricht zu deaktivieren / auszublenden? Ich sehe es immer wieder auftauchen, wenn ich einen Prozess hervorbringe und es mir auf die Nerven geht! 😅

Ich habe das gleiche Problem.

Ich habe auch das gleiche Problem. Ich weiß nicht, ob ich Mungo verwenden soll oder nicht.

+1

das gleiche Problem hier

+1

+1
Mungo: 4.10.3
MongoDB v3.4

Wenn Sie Warnungen vom Mongodb-Treiber bis 4.11 deaktivieren möchten, können Sie die folgenden Schritte ausführen und den zugrunde liegenden Client von Mongoose verwenden, um den Logger festzulegen:

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

Andernfalls geht es Ihnen gut und das Problem sollte in 4.11 behoben werden

+1

const mongoose = require ('mongoose');
var db = mongoose.connect ("mongodb: // saiganesh: [email protected]: 61121 / tester");

var Scheme = mongoose.Schema ({
Titel: String,
Autor: String,
Körper: String,
Kommentare: [{body: String, date: Date}],
Datum: {Typ: Datum, Standard: Date.now},
versteckt: Boolean,
Meta: {
Stimmen: Anzahl,
Favoriten: Nummer
}}
});
module.exports = db.model ('mongodb', Schema);

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

// neues Modell erstellen
var post = new BlogPost ({title: "Mein erster Beitrag", Autor: "saiganesh",
body: "Wir wollen die Dokumentation überflüssig machen"});

post.save (Funktion (err) {
if (err) {
return err;
}}
sonst {
console.log ("Beitrag gespeichert");
}}
});

Error:

node .index.js (node: 2604) DeprecationWarning: Mongoose: mpromise (mongoose's de
Fehlerversprechen-Bibliothek) ist veraltet. Schließen Sie stattdessen Ihre eigene Versprechen-Bibliothek an: http://mongoosejs.com/docs/promises.html
Die Methode Db.prototype.authenticate ist in der nächsten Hauptversion 3.x nicht mehr verfügbar, da MongoDB 3.6 nur die Authentifizierung gegen Benutzer im Administrator zulässt
db und lässt nicht mehr mehrere Anmeldeinformationen für einen Socket zu. Bitte authentifizieren Sie sich mit MongoClient.connect mit Authentifizierungsdaten.

events.js: 160
werfen äh; // Nicht behandeltes 'Fehler'-Ereignis
^
MongoError: Authentifizierung fehlgeschlagen.
at Function.MongoError.create (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js: 31: 11)
bei C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 497: 72
at authenticateStragglers (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 443:
16)
at Connection.messageHandler (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 4
77: 5)
bei Socket.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
bei emitOne (events.js: 96: 13)
bei Socket.emit (events.js: 188: 7)
at readableAddChunk (_stream_readable.js: 176: 18)
at Socket.Readable.push (_stream_readable.js: 134: 10)
bei TCP.onread (net.js: 548: 20)

Welche MongoDB- und Mongoose-Version soll ich verwenden, um diesen Fehler zu vermeiden?

Das ist ein Fehler, oder?

Ich bekomme das gleiche Problem. MongoDB-Shell-Version v3.4.2
Abhängigkeiten im Paket json: "mongodb": "^ 2.2.28", "mongoose": "^ 4.10.4"

"Mungo": "~ 4.10.2" ist Arbeit!

Ok, jetzt habe ich die Ordner node_module entfernt und package.json geändert, um die ältere Version "mongoose" zu verwenden: "4.10.2". Nach der Installation von npm ist die Warnmeldung verschwunden:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Ich fürchte, das ist kein guter Ansatz. Es sollte Kompatibilität zwischen der neuesten Mungo- und Mongo-Software bestehen

Ja, ich warte auf Fehlerbehebungen, vielleicht eine nächste Version

Bitte kommentieren Sie nicht nur +1 Wir haben darauf klar reagiert und festgestellt, dass es sich nicht um einen Fehler handelt, der das Problem als confirmed-bug markiert und dass es Ihnen bis Mungo 4.11 gut gehen sollte. Es ist einfach eine Warnmeldung und ich habe sogar eine Möglichkeit veröffentlicht, dass Sie den Mongodb-Logger verwenden können, um die Nachricht auszublenden, wenn Sie sie stummschalten möchten. Ich will kein Arsch sein, aber die +1 Nachrichten überfluten einfach unsere Posteingänge, was besonders ärgerlich ist, wenn das Lesen des Threads zeigt, dass das Problem behoben wurde

Was Ihr Problem scheint es sich um ein separates Problem im Zusammenhang mit Ihrer Datenbankauthentifizierung zu handeln. Können Sie bitte eine separate Ausgabe eröffnen?

+2 (für mich und meinen Kollegen)

Mungo: ^ 4.10.4

Ich erhalte auch diesen Fehler - ich nehme an, es ist nur eine Warnmeldung im Gegensatz zu einem Fehler und hindert mich nicht daran, fortzufahren?

Die Methode Db.prototype.authenticate ist in der nächsten Hauptversion 3.x nicht mehr verfügbar, da MongoDB 3.6 nur die Authentifizierung für Benutzer in der Administrator-Datenbank zulässt und nicht mehr mehrere Anmeldeinformationen für einen Socket zulässt. Bitte authentifizieren Sie sich mit MongoClient.connect mit Authentifizierungsdaten.

Ich versuche mit Mungo eine Verbindung zur mlab-Datenbank herzustellen. Ich habe versucht, ältere Versionen von Mungo zu installieren.

Ich erhalte immer wieder diesen Fehler, wenn ich npm start auf meiner MEAN-App ausführe. Ich kann die App nicht starten. Kann jemand helfen?

Bitte lesen Sie das Problem vollständig durch, bevor Sie eine bereits beantwortete Frage stellen und versehentlich eine E-Mail an alle senden, die Updates zu diesem Problem abonniert haben.

Ich frage mich, wie Sie es gelöst haben @JonathanBristow

Ich v read these comments in this page but I still can dieses Problem nicht beheben !! Könntest du meinen Code überprüfen?

Das ist mein Verbindungscode:

mongoose.Promise = require ('bluebird');
mongoose.connect ("mongodb: //::@ cluster0-shard-00-00-xlnqd.mongodb. net: 27017 , cluster0-shard-00-01-xlnqd.mongodb. net: 27017 , cluster0-shard-00-02-xlnqd.mongodb. netto: 27017 /? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin ", Funktion (err) {
if (err) {
console.log (err);
} else {
console.log ('erfolgreich mit der Datenbank verbunden.');
}}
});

und ich bekam diese Warnung:
"Die Methode" Db.prototype.authenticate "wird in der nächsten nicht mehr verfügbar sein
Hauptversion 3.x als MongoDB 3.6 erlaubt nur die Authentifizierung gegen Benutzer in der
admin db und lässt nicht mehr mehrere Anmeldeinformationen für einen Socket zu. Bitte
Authentifizierung mit MongoClient.connect mit Authentifizierungsdaten. "

@thinkdiff ... es ist ein warning , kein error . Eine Warnung weist im Allgemeinen auf etwas hin, das den Code nicht beschädigt. Auf Englisch: Es ist strukturell nichts falsch, mach dir keine Sorgen.

Ich sperre dieses Problem vorübergehend, um fortgesetzten Spam zu verhindern. Es wird eine Option geben, die diese Warnung in 4.11 ausschaltet, die diese Woche veröffentlicht wird, sofern keine unvorhergesehenen Verzögerungen auftreten. Es gibt keine Möglichkeit, diese Warnung in 4.10.x zu umgehen. Vielen Dank für Ihre Geduld.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen