Mongoose: Utilisez MongoClient.connect () au lieu de authenticate () si l'utilisateur fournit l'URI pour éviter que Db.prototype.authenticate ne soit obsolète

Créé le 28 mai 2017  ·  34Commentaires  ·  Source: Automattic/mongoose

J'utilise une méthode de connexion comme:

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

... comme indiqué dans la documentation , mais recevant l' avertissement suivant sur la console 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.

(J'obtiens un échec d'authentification si j'omets ?authSource=admin )

Est-ce normal à ce stade (faut-il attendre une prochaine sortie de mangouste?),ou que dois-je changer à partir de maintenant?

Versions:

Nœud: 7.10.0
Mangouste: 4.10.3
MongoDB: 3,4

Je vous remercie.

confirmed-bug underlying library issue

Commentaire le plus utile

s'il vous plaît ne faites pas que commenter +1 nous avons clairement répondu à cela en déclarant qu'il ne s'agit pas d'un bug de rupture, en marquant le problème comme confirmed-bug , et que tout devrait aller bien jusqu'à la mangouste 4.11. Il s'agit simplement d'un message d'avertissement et j'ai même publié un moyen d'utiliser l'enregistreur mongodb pour masquer le message si vous souhaitez le désactiver. Je ne veux pas être un connard à ce sujet, mais les messages +1 inondent simplement nos boîtes de réception, ce qui est particulièrement ennuyeux lorsque la lecture du fil de discussion montrerait que le problème a été résolu

Tous les 34 commentaires

+1

+1

+1
Mac OS X 10.12.5
Nœud: v7.10.0
Mangouste: 4.10.3
MongoDB v3.4.4

+1

yup on dirait que cela n'arrive qu'une fois que vous touchez réellement la base de données pour faire une opération (comme une écriture):

J'ai créé un utilisateur dans la base de données d'administration appelé gh_5304 (avec le même mot de passe) et j'ai accordé à l'utilisateur les privilèges dbAdminAnyDatabase , puis je me suis authentifié contre cet utilisateur dans la chaîne de connexion pour le gh-5304 table spécifiant la table admin comme 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' });
  });
}

Sortie du journal:

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

Je vais marquer cela comme un "bug", bien que je ne sois pas sûr de ce que je décrirais. C'est définitivement un avertissement qui doit être entendu ...

Le problème authSource est le comportement attendu atm, si vous vous connectez à some_db et que votre utilisateur n'est pas défini sur la base some_db données authSource .

Re: l'avertissement, c'est quelque chose que la mangouste devra soigneusement contourner car c'est la seule façon dont l'auth de mangouste fonctionne en ce moment. Même si vous spécifiez les informations d'identification dans MongoClient.connect (), mongoose appellera toujours authenticate() sous le capot. Le plan pour le moment est de faire en sorte que 4.11 utilise MongoClient.connect() si vous fournissez simplement un URI, ou de revenir à la logique de connexion interne de mangouste si vous utilisez l'hôte, l'utilisateur, etc.

Jusqu'au 4.11, je ne m'inquiéterais pas de cet avertissement. À ma connaissance, MongoDB 3.6 et le pilote MongoDB 3.0 sont peu susceptibles d'être publiés avant beaucoup plus tard cette année et ces changements ne nécessiteront aucun changement de l'utilisateur final.

Merci @varunjayaraman @ vkarpov15 pour vos réponses détaillées;)

Quelqu'un connaît-il un moyen de désactiver / masquer ce message? Je continue à le voir apparaître quand je lance un processus et cela m'énerve! 😅

J'ai le même problème.

J'ai aussi le même problème. Je ne sais pas dois-je utiliser la mangouste ou non.

+1

le même problème ici

+1

+1
Mangouste: 4.10.3
MongoDB v3.4

si vous souhaitez désactiver les avertissements du pilote mongodb jusqu'à la version 4.11, vous pouvez essayer d'utiliser les étapes ici et utiliser le client sous-jacent de mongoose pour définir le journal:

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

sinon tout ira bien et le problème devrait être résolu en 4.11

+1

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

var Scheme = mongoose.Schema ({
title: String,
auteur: String,
corps: String,
commentaires: [{body: String, date: Date}],
date: {type: Date, par défaut: Date.now},
hidden: booléen,
meta: {
votes: Nombre,
favs: Nombre
}
});
module.exports = db.model ('mongodb', Scheme);

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

// créer un nouveau modèle
var post = new BlogPost ({title: "Mon premier message", auteur: "saiganesh",
body: "Nous voulons rendre la documentation obsolète"});

post.save (fonction (err) {
if (err) {
return err;
}
autre {
console.log ("Message enregistré");
}
});

Erreur:

node .index.js (node: 2604) DeprecationWarning: Mongoose: mpromise (mangouste de
fault promise library) est obsolète, branchez plutôt votre propre bibliothèque de promesses: http://mongoosejs.com/docs/promises.html
La méthode Db.prototype.authenticate ne sera plus disponible dans la prochaine version majeure 3.x car MongoDB 3.6 n'autorisera l'authentification que contre les utilisateurs dans l'administrateur
db et n'autorisera plus plusieurs informations d'identification sur un socket. Veuillez vous authentifier à l'aide de MongoClient.connect avec les informations d'authentification.

events.js: 160
lanceur; // Evénement "erreur" non géré
^
MongoError: l'authentification a échoué.
à 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)
sur Socket.emit (events.js: 188: 7)
à readableAddChunk (_stream_readable.js: 176: 18)
à Socket.Readable.push (_stream_readable.js: 134: 10)
sur TCP.onread (net.js: 548: 20)

Quelle version de MongoDB et Mongoose dois-je utiliser pour éviter cette erreur?

c'est un bug non?

Je reçois le même problème. Version du shell MongoDB v3.4.2
dépendances dans le paquet json: "mongodb": "^ 2.2.28", "mongoose": "^ 4.10.4"

"mangouste": "~ 4.10.2", c'est du travail!

Ok maintenant j'ai supprimé les dossiers node_module et changé package.json pour utiliser l'ancienne version corrigée "mongoose": "4.10.2". Après l'installation de npm, le message d'avertissement a disparu:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Je crains que ce ne soit pas une bonne approche. Il devrait y avoir une compatibilité entre les derniers logiciels mongoose et mongo

Oui, j'attends des corrections de bugs, peut-être une prochaine version

s'il vous plaît ne faites pas que commenter +1 nous avons clairement répondu à cela en déclarant qu'il ne s'agit pas d'un bug de rupture, en marquant le problème comme confirmed-bug , et que tout devrait aller bien jusqu'à la mangouste 4.11. Il s'agit simplement d'un message d'avertissement et j'ai même publié un moyen d'utiliser l'enregistreur mongodb pour masquer le message si vous souhaitez le désactiver. Je ne veux pas être un connard à ce sujet, mais les messages +1 inondent simplement nos boîtes de réception, ce qui est particulièrement ennuyeux lorsque la lecture du fil de discussion montrerait que le problème a été résolu

quant à votre problème @msaiganesh qui

+2 (pour moi et mon collègue)

"mangouste": "^ 4.10.4"

J'obtiens également cette erreur - je suppose que c'est juste un message d'avertissement par opposition à un bogue, et ne m'empêche pas de continuer?

La méthode Db.prototype.authenticate ne sera plus disponible dans la prochaine version majeure 3.x car MongoDB 3.6 n'autorisera l'authentification que contre les utilisateurs de la base de données admin et n'autorisera plus plusieurs informations d'identification sur un socket. Veuillez vous authentifier à l'aide de MongoClient.connect avec les informations d'authentification.

J'essaye de me connecter à la base de données mlab avec mangouste. J'ai essayé d'installer d'anciennes versions de mangouste.

J'obtiens toujours cette erreur lorsque j'exécute npm start sur mon application MEAN. Je ne peux pas démarrer l'application. Quelqu'un peut-il aider?

Veuillez lire le problème dans son intégralité avant d'envoyer poser une question déjà répondue et d'envoyer par inadvertance un e-mail à tous ceux qui se sont abonnés aux mises à jour sur ce problème.

Je me demande comment tu l'as résolu @JonathanBristow

Je v read these comments in this page but I still can t résoudre ce problème !! pouvez-vous vérifier mon code?

c'est mon code de connexion:

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. net: 27017 /? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin ", fonction (err) {
if (err) {
console.log (err);
} autre {
console.log ('connecté à la base de données avec succès.');
}
});

et j'ai eu cet avertissement:
"La méthode Db.prototype.authenticate ne sera plus disponible dans le prochain
version majeure 3.x car MongoDB 3.6 n'autorisera l'authentification que contre les utilisateurs du
admin db et n'autorisera plus plusieurs informations d'identification sur un socket. S'il vous plaît
authentifiez-vous à l'aide de MongoClient.connect avec les informations d'authentification. "

@thinkdiff ... c'est un warning , pas un error . Un avertissement indique généralement quelque chose qui ne va pas casser le code. En anglais: il n'y a rien de structurellement faux, ne vous inquiétez pas.

Je verrouille temporairement ce problème pour empêcher la poursuite du spam. Il y aura une option qui désactivera cet avertissement dans la version 4.11, qui sera publiée cette semaine sauf retards imprévus. Il n'y a aucun moyen de contourner cet avertissement dans 4.10.x. Merci pour votre patience.

Cette page vous a été utile?
0 / 5 - 0 notes