Mongoose: Use MongoClient.connect () en lugar de authenticate () si el usuario proporciona URI para evitar Db.prototype.authenticate obsoleto

Creado en 28 may. 2017  ·  34Comentarios  ·  Fuente: Automattic/mongoose

Estoy usando un método de conexión como:

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

... como se indica en los documentos , pero recibe la siguiente advertencia en la consola 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.

(Recibo una falla de autenticación si omito ?authSource=admin )

¿Es esto normal en esta etapa (¿tenemos que esperar a la próxima liberación de mangosta?),o que debo cambiar a partir de ahora?

Versiones:

Nodo: 7.10.0
Mangosta: 4.10.3
MongoDB: 3.4

Gracias.

confirmed-bug underlying library issue

Comentario más útil

por favor no solo comente +1 , hemos respondido claramente a esto indicando que no es un error de ruptura, marcando el problema como confirmed-bug , y que debería estar bien hasta la mangosta 4.11. Es simplemente un mensaje de advertencia e incluso publiqué una forma de que podría usar el registrador mongodb para ocultar el mensaje si desea silenciarlo. No quiero ser un idiota al respecto, pero los mensajes +1 simplemente inundan nuestras bandejas de entrada, lo cual es particularmente molesto cuando leer el hilo muestra que el problema se ha solucionado.

Todos 34 comentarios

+1

+1

+1
Mac OS X 10.12.5
Nodo: v7.10.0
Mangosta: 4.10.3
MongoDB v3.4.4

+1

sí, parece que solo sucede una vez que realmente tocas la base de datos para realizar alguna operación (como una escritura):

Creé un usuario en la base de datos de administración llamado gh_5304 (con la misma contraseña) y le otorgué privilegios al usuario dbAdminAnyDatabase y luego me autentiqué contra ese usuario en la cadena de conexión para el gh-5304 tabla que especifica la tabla admin como 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' });
  });
}

Salida de registro:

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

Lo marcaré como un "error", aunque tbh no estoy seguro de cómo lo describiría. Definitivamente es una advertencia que debe ser atendida ...

El problema authSource es el comportamiento esperado en un cajero automático, si se está conectando a some_db y su usuario no está definido en la base some_db datos authSource .

Re: la advertencia, esto es algo que mongoose tendrá que solucionar con cuidado porque esa es la única forma en que funciona la autenticación de mangosta en este momento. Incluso si especifica credenciales en MongoClient.connect (), mongoose aún llamará authenticate() bajo el capó. El plan en este momento es hacer que 4.11 use MongoClient.connect() si solo proporciona un URI, o recurrir a la lógica de conexión interna de mangosta si usa host, usuario, etc.

Hasta las 4.11, no me preocuparía por esta advertencia. Hasta donde yo sé, es poco probable que MongoDB 3.6 y el controlador MongoDB 3.0 se publiquen hasta mucho más tarde este año y estos cambios no requerirán ningún cambio por parte del usuario final.

Gracias @varunjayaraman @ vkarpov15 por sus respuestas detalladas;)

¿Alguien conoce alguna forma de deshabilitar / ocultar este mensaje? ¡Sigo viendo cómo surge cuando engendro un proceso y me está poniendo de los nervios! 😅

Tengo el mismo problema.

También tengo el mismo problema. No sé si debería usar mangosta o no.

+1

el mismo problema aquí

+1

+1
Mangosta: 4.10.3
MongoDB v3.4

Si desea desactivar las advertencias del controlador mongodb hasta la 4.11, puede intentar seguir los pasos aquí y usar el cliente subyacente de mongoose para configurar el registrador:

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

de lo contrario, estará bien y el problema debería resolverse en 4.11

+1

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

var Scheme = mongoose.Schema ({
título: Cadena,
autor: String,
cuerpo: String,
comentarios: [{cuerpo: cadena, fecha: fecha}],
fecha: {tipo: fecha, predeterminado: fecha actual},
oculto: booleano,
meta: {
votos: Número,
favs: Número
}
});
module.exports = db.model ('mongodb', Esquema);

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

// crear nuevo modelo
var post = new BlogPost ({title: "Mi primera publicación", autor: "saiganesh",
cuerpo: "Queremos que la documentación sea obsoleta"});

post.save (función (err) {
si (err) {
return err;
}
else {
console.log ("Publicación guardada");
}
});

error:

node .index.js (node: 2604) DeprecationWarning: Mongoose: mpromise (mangosta de
biblioteca de promesas de fallas) está en desuso, conecte su propia biblioteca de promesas en su lugar: http://mongoosejs.com/docs/promises.html
El método Db.prototype.authenticate ya no estará disponible en la próxima versión principal 3.x ya que MongoDB 3.6 solo permitirá la autenticación contra usuarios en el administrador
db y ya no permitirá múltiples credenciales en un socket. Autentíquese mediante MongoClient.connect con credenciales de autenticación.

events.js: 160
lanzador; // Evento de 'error' no controlado
^
MongoError: Error de autenticación.
en Function.MongoError.create (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js: 31: 11)
en C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 497: 72
en authenticateStragglers (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 443:
dieciséis)
en Connection.messageHandler (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 4
77: 5)
en Socket.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
en emitOne (events.js: 96: 13)
en Socket.emit (events.js: 188: 7)
en readableAddChunk (_stream_readable.js: 176: 18)
en Socket.Readable.push (_stream_readable.js: 134: 10)
en TCP.onread (net.js: 548: 20)

¿Qué versión de MongoDB y Mongoose debo usar para evitar este error?

esto es un error, ¿verdad?

Estoy recibiendo el mismo problema. Versión de shell de MongoDB v3.4.2
dependencias en el paquete json: "mongodb": "^ 2.2.28", "mangosta": "^ 4.10.4"

"mangosta": "~ 4.10.2", ¡es trabajo!

Ok, ahora eliminé las carpetas node_module y cambié package.json para usar la versión anterior fija "mongoose": "4.10.2". Después de la instalación de npm, el mensaje de advertencia desaparece:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Me temo que este no es un buen enfoque. Debe haber compatibilidad entre los últimos softwares mongoose y mongo

Sí, estoy esperando correcciones de errores, tal vez una próxima versión

por favor no solo comente +1 , hemos respondido claramente a esto indicando que no es un error de ruptura, marcando el problema como confirmed-bug , y que debería estar bien hasta la mangosta 4.11. Es simplemente un mensaje de advertencia e incluso publiqué una forma de que podría usar el registrador mongodb para ocultar el mensaje si desea silenciarlo. No quiero ser un idiota al respecto, pero los mensajes +1 simplemente inundan nuestras bandejas de entrada, lo cual es particularmente molesto cuando leer el hilo muestra que el problema se ha solucionado.

en cuanto a su problema @msaiganesh ,

+2 (para mí y mi compañero de trabajo)

"mangosta": "^ 4.10.4"

También recibo este error; supongo que es solo un mensaje de advertencia en lugar de un error, y no me impide continuar.

El método Db.prototype.authenticate ya no estará disponible en la próxima versión principal 3.x ya que MongoDB 3.6 solo permitirá la autenticación contra usuarios en la base de datos de administración y ya no permitirá múltiples credenciales en un socket. Autentíquese mediante MongoClient.connect con credenciales de autenticación.

Estoy tratando de conectarme a la base de datos mlab con mongoose. He intentado instalar versiones anteriores de mongoose.

Sigo recibiendo este error cuando ejecuto npm start en mi aplicación MEAN. No puedo iniciar la aplicación. ¿Alguien puede ayudar?

Lea el problema en su totalidad antes de enviar una pregunta ya respondida y, sin darse cuenta, envíe un correo electrónico a todos los que se hayan suscrito a las actualizaciones sobre este problema.

Me pregunto cómo lo resolviste @JonathanBristow

¡¡Yo v read these comments in this page but I still can soluciono este problema !! ¿Podrías comprobar mi código?

este es mi código de conexión:

mongoose.Promise = require ('pájaro azul');
mongoose.connect ("mongodb: //:@ cluster0-shard-00-00-xlnqd.mongodb. red: 27017 , cluster0-shard-00-01-xlnqd.mongodb. red: 27017 , cluster0-shard-00-02-xlnqd.mongodb. red: 27017 /? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin ", función (err) {
si (err) {
console.log (err);
} más {
console.log ('conectado a la base de datos correctamente.');
}
});

y recibí esta advertencia:
"El método Db.prototype.authenticate ya no estará disponible en la próxima
versión principal 3.x como MongoDB 3.6 solo permitirá la autenticación contra usuarios en el
admin db y ya no permitirá múltiples credenciales en un socket. Por favor
autenticarse usando MongoClient.connect con credenciales de autenticación ".

@thinkdiff ... es un warning , no un error . Una advertencia generalmente indica algo que no va a romper el código. En inglés: no hay nada estructuralmente incorrecto, no te preocupes.

Estoy bloqueando este problema temporalmente para evitar que continúe el spam. Habrá una opción que apagará esta advertencia en 4.11, que se lanzará esta semana salvo retrasos imprevistos. No hay forma de omitir esta advertencia en 4.10.x. Gracias por su paciencia.

¿Fue útil esta página
0 / 5 - 0 calificaciones