Mongoose: Use MongoClient.connect () em vez de authenticate () se o usuário fornecer URI para evitar o uso do Db.prototype.authenticate

Criado em 28 mai. 2017  ·  34Comentários  ·  Fonte: Automattic/mongoose

Estou usando um método de conexão 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); 

... conforme indicado nos documentos , mas recebendo o seguinte aviso no 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.

(Obtenho uma falha de autenticação se omitir ?authSource=admin )

Isso é normal neste estágio (precisamos esperar pelo próximo lançamento do mangusto?),ou o que devo mudar a partir de agora?

Versões:

Nó: 7.10.0
Mongoose: 4.10.3
MongoDB: 3.4

Obrigado.

confirmed-bug underlying library issue

Comentários muito úteis

por favor, não comente apenas +1 , respondemos claramente a isso afirmando que não é um bug de quebra, marcando o problema como confirmed-bug , e que você deve ficar bem até o mangusto 4.11. É simplesmente uma mensagem de aviso e até postei uma maneira de você usar o logger mongodb para ocultar a mensagem se quiser silenciá-la. Não quero ser um idiota sobre isso, mas as mensagens +1 simplesmente inundam nossas caixas de entrada, o que é particularmente irritante quando a leitura do tópico mostra que o problema foi resolvido

Todos 34 comentários

+1

+1

+1
Mac OS X 10.12.5
Nó: v7.10.0
Mongoose: 4.10.3
MongoDB v3.4.4

+1

Sim, parece que isso só acontece quando você realmente toca no banco de dados para fazer alguma operação (como uma gravação):

Eu criei um usuário no banco de dados do administrador chamado gh_5304 (com a mesma senha) e conceda ao usuário dbAdminAnyDatabase privilégios e, em seguida, autentiquei esse usuário na string de conexão para gh-5304 tabela especificando a tabela 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' });
  });
}

Saída de log:

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

Vou marcar isso como um "bug", embora tbh não tenha certeza de como descreveria isso. É definitivamente um aviso que deve ser atendido ...

O problema authSource é o comportamento esperado atm, se você estiver se conectando a some_db e seu usuário não estiver definido no banco de dados some_db , você precisa especificar authSource .

Re: o aviso, isso é algo que o mangusto terá que contornar com cuidado porque é a única maneira que a autenticação do mangusto funciona agora. Mesmo se você especificar credenciais em MongoClient.connect (), o mongoose ainda chamará authenticate() sob o capô. O plano agora é fazer com que 4.11 use MongoClient.connect() se você apenas fornecer um URI ou recorrer à lógica de conexão interna do mangusto se usar host, usuário, etc.

Até 4.11, eu não me preocuparia com este aviso. Até onde eu sei, o MongoDB 3.6 e o ​​MongoDB driver 3.0 provavelmente não serão lançados até muito mais tarde neste ano e essas mudanças não exigirão nenhuma alteração do usuário final.

Obrigado @varunjayaraman @ vkarpov15 por suas respostas detalhadas;)

Alguém conhece uma maneira de desativar / ocultar esta mensagem? Eu continuo vendo isso surgir quando eu inicio um processo e está me dando nos nervos! 😅

Eu tenho o mesmo problema.

Eu também tenho o mesmo problema. Não sei se devo usar mangusto ou não.

+1

o mesmo problema aqui

+1

+1
Mongoose: 4.10.3
MongoDB v3.4

se quiser desligar os avisos do driver mongodb até 4.11, você pode tentar seguir as etapas aqui e usar o cliente subjacente do mongoose para definir o logger:

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

caso contrário, você ficará bem e o problema deverá ser resolvido em 4.11

+1

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

var Scheme = mongoose.Schema ({
título: String,
autor: String,
corpo: String,
comentários: [{body: String, date: Date}],
data: {type: Date, default: Date.now},
oculto: booleano,
meta: {
votos: número,
favs: número
}
});
module.exports = db.model ('mongodb', Esquema);

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

// cria um novo modelo
var post = new BlogPost ({title: "Minha primeira postagem", autor: "saiganesh",
body: "Queremos tornar a documentação obsoleta"});

post.save (function (err) {
if (err) {
return err;
}
outro {
console.log ("Postagem salva");
}
});

erro:

node .index.js (node: 2604) Aviso de descontinuação: Mongoose: mpromise (mongoose's de
biblioteca de promessa de falha) está obsoleta, conecte sua própria biblioteca de promessa: http://mongoosejs.com/docs/promises.html
O método Db.prototype.authenticate não estará mais disponível na próxima versão principal 3.x, pois o MongoDB 3.6 só permitirá a autenticação de usuários no administrador
db e não permitirá mais credenciais múltiplas em um soquete. Autentique usando MongoClient.connect com credenciais de autenticação.

events.js: 160
jogue er; // Evento de 'erro' não tratado
^
MongoError: Falha na autenticação.
em Function.MongoError.create (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js: 31: 11)
em C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 497: 72
em authenticateStragglers (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 443:
16)
em Connection.messageHandler (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 4
77: 5)
em Socket.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
em emitOne (events.js: 96: 13)
em Socket.emit (events.js: 188: 7)
em readableAddChunk (_stream_readable.js: 176: 18)
em Socket.Readable.push (_stream_readable.js: 134: 10)
em TCP.onread (net.js: 548: 20)

Qual versão do MongoDB e Mongoose devo usar para evitar esse erro?

isso é bug certo?

Estou tendo o mesmo problema. MongoDB shell versão v3.4.2
dependências no pacote json: "mongodb": "^ 2.2.28", "mongoose": "^ 4.10.4"

"mangusto": "~ 4.10.2", é trabalho!

Ok, agora removi as pastas node_module e alterei o package.json para usar a versão anterior corrigida "mongoose": "4.10.2". Após a instalação do npm, a mensagem de aviso desaparece:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Receio que esta não seja uma boa abordagem. Deve haver compatibilidade entre os softwares mongoose e mongo mais recentes

Sim, estou esperando por correções de bug talvez uma próxima versão

por favor, não comente apenas +1 , respondemos claramente a isso afirmando que não é um bug de quebra, marcando o problema como confirmed-bug , e que você deve ficar bem até o mangusto 4.11. É simplesmente uma mensagem de aviso e até postei uma maneira de você usar o logger mongodb para ocultar a mensagem se quiser silenciá-la. Não quero ser um idiota sobre isso, mas as mensagens +1 simplesmente inundam nossas caixas de entrada, o que é particularmente irritante quando a leitura do tópico mostra que o problema foi resolvido

quanto ao seu problema @msaiganesh que parece ser um problema separado relacionado à sua autenticação de banco de dados. Você pode abrir um problema separado?

+2 (para mim e meu colega de trabalho)

"mangusto": "^ 4.10.4"

Também estou recebendo este erro - presumo que seja apenas uma mensagem de aviso, e não um bug, e não me impede de continuar?

O método Db.prototype.authenticate não estará mais disponível na próxima versão principal 3.x, pois o MongoDB 3.6 só permitirá a autenticação de usuários no banco de dados administrativo e não permitirá mais várias credenciais em um soquete. Autentique usando MongoClient.connect com credenciais de autenticação.

Estou tentando me conectar ao banco de dados do mlab com mongoose. Tentei instalar versões mais antigas do mangusto.

Continuo recebendo esse erro quando executo o npm start no meu aplicativo MEAN. Não consigo iniciar o aplicativo. Alguém pode ajudar?

Leia o problema na íntegra antes de enviar uma pergunta já respondida e, inadvertidamente, enviar um e-mail para todos que se inscreveram para receber atualizações sobre o assunto.

Eu me pergunto como você resolveu isso @JonathanBristow

I v read these comments in this page but I still can t consertar este problema !! você poderia verificar meu código?

este é o meu código de conexão:

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 ", função (errar) {
if (err) {
console.log (errar);
} outro {
console.log ('conectado ao banco de dados com sucesso.');
}
});

e recebi este aviso:
"O método Db.prototype.authenticate não estará mais disponível nos próximos
versão principal 3.x como MongoDB 3.6 só permitirá a autenticação de usuários no
admin db e não permitirá mais credenciais múltiplas em um soquete. Por favor
autenticar usando MongoClient.connect com credenciais de autenticação. "

@thinkdiff ... é um warning , não um error . Um aviso geralmente indica algo que não vai quebrar o código. Em inglês: não há nada de estruturalmente errado, não se preocupe.

Estou bloqueando esse problema temporariamente para evitar a continuação do spam. Haverá uma opção que desligará este aviso em 4.11, que será lançado esta semana salvo atrasos imprevistos. Não há como ignorar esse aviso em 4.10.x. Obrigado pela sua paciência.

Esta página foi útil?
0 / 5 - 0 avaliações