Mongoose: Gunakan MongoClient.connect () alih-alih otentikasi () jika pengguna menyediakan URI untuk menghindari Db.prototype.authenticate tidak digunakan lagi

Dibuat pada 28 Mei 2017  ·  34Komentar  ·  Sumber: Automattic/mongoose

Saya menggunakan metode koneksi seperti:

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

... seperti yang ditunjukkan dalam dokumen , tetapi menerima peringatan berikut di konsol 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.

(Saya mendapatkan kegagalan otentikasi jika saya menghilangkan ?authSource=admin )

Apakah ini normal pada tahap ini (apakah kita perlu menunggu pelepasan luwak berikutnya?),atau apa yang harus saya ubah dari sekarang?

Versi:

Node: 7.10.0
Luwak: 4.10.3
MongoDB: 3.4

Terima kasih.

confirmed-bug underlying library issue

Komentar yang paling membantu

tolong jangan hanya berkomentar +1 kami telah menanggapi ini dengan jelas dengan menyatakan bahwa ini bukan bug yang merusak, menandai masalah sebagai confirmed-bug , dan bahwa Anda akan baik-baik saja sampai luwak 4.11. Ini hanyalah pesan peringatan dan saya bahkan memposting cara agar Anda dapat menggunakan mongodb logger untuk menyembunyikan pesan jika Anda ingin menonaktifkannya. Saya tidak bermaksud merendahkannya, tetapi pesan +1 hanya membanjiri kotak masuk kami, yang sangat mengganggu saat membaca utas akan menunjukkan bahwa masalah telah diatasi

Semua 34 komentar

+1

+1

+1
Mac OS X 10.12.5
Node: v7.10.0
Luwak: 4.10.3
MongoDB v3.4.4

+1

yup sepertinya itu hanya terjadi setelah Anda benar-benar menyentuh db untuk melakukan beberapa operasi (seperti menulis):

Saya membuat pengguna di database admin bernama gh_5304 (dengan sandi yang sama) dan memberikan hak istimewa kepada pengguna dbAdminAnyDatabase dan kemudian mengautentikasi pengguna tersebut dalam string koneksi untuk gh-5304 tabel yang menetapkan tabel admin sebagai 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' });
  });
}

Keluaran 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

Saya akan menandai ini sebagai "bug", meskipun tbh saya tidak yakin apa yang akan saya gambarkan sebagai ini. Ini pasti peringatan yang harus diperhatikan ...

Masalah authSource adalah perilaku yang diharapkan atm, jika Anda terhubung ke some_db dan pengguna Anda tidak ditentukan di database some_db , Anda perlu menentukan authSource .

Re: peringatan, ini adalah sesuatu yang luwak harus bekerja dengan hati-hati karena itulah satu-satunya cara kerja autentikasi luwak saat ini. Meskipun Anda menentukan kredensial di MongoClient.connect (), mongoose masih akan memanggil authenticate() bawah tenda. Rencananya sekarang adalah membuat 4.11 menggunakan MongoClient.connect() jika Anda hanya memberikan URI, atau kembali ke logika koneksi internal luwak jika Anda menggunakan host, pengguna, dll.

Hingga 4.11, saya tidak akan khawatir tentang peringatan ini. Sepengetahuan saya, MongoDB 3.6 dan MongoDB driver 3.0 tidak mungkin dirilis hingga akhir tahun ini dan perubahan ini tidak memerlukan perubahan pengguna akhir apa pun.

Terima kasih @varunjayaraman @ vkarpov15 atas jawaban rinci Anda;)

Adakah yang tahu cara menonaktifkan / menyembunyikan pesan ini? Saya terus melihatnya muncul ketika saya menelurkan proses dan itu membuat saya jengkel! 😅

Saya memiliki masalah yang sama.

Saya juga memiliki masalah yang sama. Saya tidak tahu haruskah saya menggunakan luwak atau tidak.

+1

masalah yang sama di sini

+1

+1
Luwak: 4.10.3
MongoDB v3.4

jika Anda ingin mematikan peringatan dari driver mongodb hingga 4.11, Anda dapat mencoba menggunakan langkah-langkah di sini dan menggunakan klien yang mendasari dari luwak untuk mengatur logger:

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

jika tidak, Anda akan baik-baik saja dan masalah harus diselesaikan dalam 4.11

+1

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

var Scheme = luwak.Schema ({
judul: String,
penulis: String,
body: String,
komentar: [{body: String, date: Date}],
tanggal: {type: Date, default: Date.now},
tersembunyi: Boolean,
meta: {
suara: Nomor,
favs: Nomor
}
});
module.exports = db.model ('mongodb', Skema);

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

// buat model baru
var post = new BlogPost ({title: "My first post", author: "saiganesh",
body: "Kami ingin membuat dokumentasi menjadi usang"});

post.save (function (err) {
jika (err) {
kembali salah;
}
lain {
console.log ("Posting disimpan");
}
});

kesalahan:

node .index.js (node: 2604) DeprecationWarning: Mongoose: mpromise (mongoose's de
pustaka janji kesalahan) tidak digunakan lagi, pasang pustaka janji Anda sendiri sebagai gantinya: http://mongoosejs.com/docs/promises.html
Metode Db.prototype.authenticate tidak akan tersedia lagi di rilis utama berikutnya 3.x karena MongoDB 3.6 hanya akan mengizinkan autentikasi terhadap pengguna di admin
db dan tidak lagi mengizinkan beberapa kredensial pada soket. Harap autentikasi menggunakan MongoClient.connect dengan kredensial autentikasi.

events.js: 160
melempar er; // Acara 'error' yang tidak tertangani
^
MongoError: Otentikasi gagal.
di Function.MongoError.create (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js: 31: 11)
di C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 497: 72
di authenticicateStragglers (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 443:
16)
di Connection.messageHandler (C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js: 4
77: 5)
di Socket.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
di emitOne (events.js: 96: 13)
di Socket.emit (events.js: 188: 7)
di readableAddChunk (_stream_readable.js: 176: 18)
di Socket.Readable.push (_stream_readable.js: 134: 10)
di TCP.onread (net.js: 548: 20)

Versi MongoDB dan Mongoose mana yang harus saya gunakan untuk menghindari kesalahan ini?

ini bug kan?

Saya mendapatkan masalah yang sama. Versi shell MongoDB v3.4.2
ketergantungan dalam paket json: "mongodb": "^ 2.2.28", "mongoose": "^ 4.10.4"

"luwak": "~ 4.10.2", adalah pekerjaan!

Ok sekarang saya telah menghapus folder node_module dan mengubah package.json untuk menggunakan versi lama tetap "mongoose": "4.10.2". Setelah menginstal npm, pesan peringatan hilang:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
Saya khawatir ini bukan pendekatan yang baik. Harus ada kompatibilitas antara software luwak dan mongo terbaru

Ya, saya menunggu perbaikan bug, mungkin versi berikutnya

tolong jangan hanya berkomentar +1 kami telah menanggapi ini dengan jelas dengan menyatakan bahwa ini bukan bug yang merusak, menandai masalah sebagai confirmed-bug , dan bahwa Anda akan baik-baik saja sampai luwak 4.11. Ini hanyalah pesan peringatan dan saya bahkan memposting cara agar Anda dapat menggunakan mongodb logger untuk menyembunyikan pesan jika Anda ingin menonaktifkannya. Saya tidak bermaksud merendahkannya, tetapi pesan +1 hanya membanjiri kotak masuk kami, yang sangat mengganggu saat membaca utas akan menunjukkan bahwa masalah telah diatasi

Adapun masalah Anda tampaknya menjadi masalah terpisah terkait dengan otentikasi db Anda. Bisakah Anda membuka masalah terpisah?

+2 (untuk saya dan rekan kerja saya)

"luwak": "^ 4.10.4"

Saya mendapatkan kesalahan ini juga - menurut saya itu hanya pesan peringatan dan bukan bug, dan tidak mencegah saya untuk melanjutkan?

Metode Db.prototype.authenticate tidak akan lagi tersedia di rilis utama berikutnya 3.x karena MongoDB 3.6 hanya akan mengizinkan autentikasi terhadap pengguna di db admin dan tidak lagi mengizinkan beberapa kredensial pada soket. Harap autentikasi menggunakan MongoClient.connect dengan kredensial autentikasi.

Saya mencoba untuk terhubung ke database mlab dengan luwak. Saya telah mencoba menginstal versi lama dari luwak.

Saya terus mendapatkan kesalahan ini saat menjalankan npm start di aplikasi MEAN saya. Saya tidak bisa memulai aplikasi. Adakah yang bisa membantu?

Harap baca masalah ini secara lengkap sebelum mengirimkan pertanyaan yang sudah dijawab dan secara tidak sengaja mengirimkan email ke semua orang yang telah berlangganan pembaruan tentang masalah ini.

Saya ingin tahu bagaimana Anda menyelesaikannya di @JonathanBristow

Saya v read these comments in this page but I still can t memperbaiki masalah ini !! bisakah kamu memeriksa kode saya?

ini kode koneksi saya:

mongoose.Promise = membutuhkan ('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. bersih: 27017 /? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin ", function (err) {
jika (err) {
console.log (err);
} lain {
console.log ('berhasil terhubung ke database.');
}
});

dan saya mendapat peringatan ini:
"Metode Db.prototype.authenticate tidak akan tersedia lagi di waktu mendatang
rilis major 3.x karena MongoDB 3.6 hanya akan mengizinkan auth terhadap pengguna di file
admin db dan tidak akan lagi mengizinkan beberapa kredensial pada soket. Silahkan
autentikasi menggunakan MongoClient.connect dengan kredensial autentikasi. "

@thinkdiff ... ini warning , bukan error . Peringatan biasanya menunjukkan sesuatu yang tidak akan merusak kode. Dalam bahasa Inggris: tidak ada yang salah secara struktural, jangan khawatir.

Saya mengunci masalah ini sementara untuk mencegah spam berlanjut. Akan ada opsi yang akan mematikan peringatan ini di 4.11, yang akan dirilis minggu ini jika tidak ada penundaan yang tidak terduga. Tidak ada cara untuk melewati peringatan ini di 4.10.x. Terima kasih atas kesabaran Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat