Mongoose: استخدم MongoClient.connect () بدلاً من المصادقة () إذا قدم المستخدم URI لتجنب Db.prototype.authenticate تم إهماله

تم إنشاؤها على ٢٨ مايو ٢٠١٧  ·  34تعليقات  ·  مصدر: Automattic/mongoose

أنا أستخدم طريقة اتصال مثل:

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

... كما هو موضح في المستندات ، ولكن تلقي التحذير التالي على وحدة تحكم 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.

(لقد فشلت المصادقة إذا حذفت ?authSource=admin )

هل هذا طبيعي في هذه المرحلة (هل نحتاج إلى انتظار إطلاق النمس التالي؟) ،أو ماذا علي أن أغير من الآن؟

إصدارات:

العقدة: 7.10.0
النمس: 4.10.3
MongoDB: 3.4

شكرا لك.

confirmed-bug underlying library issue

التعليق الأكثر فائدة

من فضلك لا تعلق فقط على +1 لقد استجبنا لهذا بوضوح بالقول إنه ليس خطأ فاصل ، ووضع علامة على المشكلة على أنها confirmed-bug ، وأنه يجب أن تكون بخير حتى النمس 4.11. إنها مجرد رسالة تحذير وقد قمت بنشر طريقة يمكنك من خلالها استخدام مسجل mongodb لإخفاء الرسالة إذا كنت تريد كتمها. لا أقصد أن أكون متحمسًا حيال ذلك ، ولكن رسائل +1 تغمر صناديق البريد الوارد لدينا ، وهو أمر مزعج بشكل خاص عند قراءة سلسلة المحادثات من شأنه أن يُظهر أن المشكلة قد تمت معالجتها

ال 34 كومينتر

+1

+1

+1
نظام التشغيل Mac OS X 10.12.5
العقدة: v7.10.0
النمس: 4.10.3
MongoDB v3.4.4

+1

يبدو أنه يحدث فقط بمجرد لمس db بالفعل للقيام ببعض العمليات (مثل الكتابة):

لقد أنشأت مستخدمًا في قاعدة بيانات المسؤول يسمى gh_5304 (بنفس كلمة المرور) ومنحت المستخدم امتيازات dbAdminAnyDatabase ثم تمت المصادقة ضد هذا المستخدم في سلسلة الاتصال لـ gh-5304 جدول يحدد الجدول admin كمصدر للمصادقة:

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

إخراج السجل:

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

سأضع علامة على هذا على أنه "خطأ" ، على الرغم من أنني لست متأكدًا مما سأصفه. إنه بالتأكيد تحذير يجب الانتباه إليه ...

مشكلة authSource هي سلوك متوقع في أجهزة الصراف الآلي ، إذا كنت تتصل بـ some_db ولم يتم تعريف المستخدم الخاص بك في قاعدة بيانات some_db ، فأنت بحاجة إلى تحديد authSource .

رد: التحذير ، هذا شيء سيتعين على النمس أن يتعامل معه بعناية لأن هذه هي الطريقة الوحيدة التي يعمل بها مصادقة النمس الآن. حتى إذا حددت بيانات الاعتماد في MongoClient.connect () ، فسيظل النمس يتصل بـ authenticate() تحت الغطاء. الخطة الآن هي جعل 4.11 يستخدم MongoClient.connect() إذا قمت فقط بتوفير URI ، أو الرجوع إلى منطق الاتصال الداخلي لـ mongoose إذا كنت تستخدم مضيفًا ، مستخدمًا ، إلخ.

حتى 4.11 ، لن أقلق بشأن هذا التحذير. على حد علمي ، من غير المحتمل إصدار MongoDB 3.6 و MongoDB driver 3.0 حتى وقت لاحق من هذا العام ولن تتطلب هذه التغييرات أي تغييرات للمستخدم النهائي.

شكرًا varunjayaraman @ vkarpov15 على إجاباتك التفصيلية ؛)

هل يعرف أي شخص طريقة لتعطيل / إخفاء هذه الرسالة؟ ما زلت أراها تظهر عندما أفرز عملية وهي تثير أعصابي! 😅

لدي نفس المشكلة.

لدي نفس المشكلة لا أعرف هل يجب أن أستخدم النمس أم لا.

+1

نفس المشكلة هنا

+1

+1
النمس: 4.10.3
MongoDB v3.4

إذا كنت ترغب في إيقاف تشغيل التحذيرات من برنامج التشغيل mongodb حتى 4.11 ، يمكنك محاولة استخدام الخطوات هنا واستخدام العميل الأساسي من النمس لضبط المسجل:

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

وإلا ستكون بخير ويجب حل المشكلة بـ 4.11

+1

const mongoose = تتطلب ('mongoose') ؛
var db = mongoose.connect ("mongodb: // saiganesh: [email protected]: 61121 / tester") ؛

var Scheme = mongoose.Schema ({
العنوان: سلسلة ،
المؤلف: سلسلة ،
الجسم: سلسلة ،
التعليقات: [{body: String، date: Date}]،
التاريخ: {type: Date، default: Date.now}،
مخفي: منطقي ،
ميتا: {
الأصوات: عدد ،
favs: رقم
}
}) ؛
module.exports = db.model ('mongodb' ، مخطط) ؛

var BlogPost = يتطلب ("./ Models / mongodb.js") ؛

// إنشاء نموذج جديد
var post = new BlogPost ({title: "مشاركتي الأولى" ، المؤلف: "saiganesh" ،
body: "نريد جعل الوثائق قديمة"})؛

post.save (وظيفة (يخطئ) {
إذا (يخطئ) {
العودة يخطئ
}
آخر {
console.log ("تم حفظ المنشور") ؛
}
}) ؛

خطأ:

node .index.js (العقدة: 2604) الإيقاف تحذير: النمس: mpromise (mongoose's de
مكتبة الوعد بالخطأ) مهملة ، قم بتوصيل مكتبة الوعد الخاصة بك بدلاً من ذلك: http://mongoosejs.com/docs/promises.html
لن تكون طريقة Db.prototype.authenticate متاحة بعد الآن في الإصدار الرئيسي التالي 3.x حيث أن MongoDB 3.6 سيسمح فقط بالمصادقة ضد المستخدمين في المسؤول
db ولن يسمح بعد الآن ببيانات اعتماد متعددة على المقبس. يرجى المصادقة باستخدام MongoClient.connect مع بيانات اعتماد المصادقة.

Events.js: 160
رمي إيه ؛ // حدث "خطأ" غير معالج
^
MongoError: فشلت المصادقة.
في 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)
في المقبس.(C: UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js: 32
1:22)
في emitOne (events.js: 96: 13)
في Socket.emit (events.js: 188: 7)
في readableAddChunk (_stream_readable.js: 176: 18)
في Socket.Readable.push (_stream_readable.js: 134: 10)
في TCP.onread (net.js: 548: 20)

ما هو إصدار MongoDB و Mongoose الذي يجب علي استخدامه لتجنب هذا الخطأ؟

هذا خطأ صحيح؟

انا اواجة نفس المشكلة. إصدار MongoDB shell v3.4.2
التبعيات في الحزمة json: "mongodb": "^ 2.2.28"، "mongoose": "^ 4.10.4"

"النمس": "~ 4.10.2" ، هو العمل!

حسنًا ، لقد قمت الآن بإزالة مجلدات node_module وقمت بتغيير package.json لاستخدام الإصدار الأقدم الثابت "mongoose": "4.10.2". بعد تثبيت npm ، تختفي رسالة التحذير:

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
أخشى أن هذا ليس نهجا جيدا. يجب أن يكون هناك توافق بين أحدث برامج النمس وبرامج النمس

نعم ، أنا في انتظار إصلاحات الأخطاء ربما الإصدار التالي

من فضلك لا تعلق فقط على +1 لقد استجبنا لهذا بوضوح بالقول إنه ليس خطأ فاصل ، ووضع علامة على المشكلة على أنها confirmed-bug ، وأنه يجب أن تكون بخير حتى النمس 4.11. إنها مجرد رسالة تحذير وقد قمت بنشر طريقة يمكنك من خلالها استخدام مسجل mongodb لإخفاء الرسالة إذا كنت تريد كتمها. لا أقصد أن أكون متحمسًا حيال ذلك ، ولكن رسائل +1 تغمر صناديق البريد الوارد لدينا ، وهو أمر مزعج بشكل خاص عند قراءة سلسلة المحادثات من شأنه أن يُظهر أن المشكلة قد تمت معالجتها

بالنسبة لمشكلتكmsaiganesh أن اللحامات ستكون مشكلة منفصلة تتعلق بمصادقة db الخاصة بك. هل يمكنك من فضلك فتح قضية منفصلة؟

+2 (لي ولزملائي في العمل)

"النمس": "^ 4.10.4"

أتلقى هذا الخطأ أيضًا - أعتبر أنه مجرد رسالة تحذير وليس خطأ ، ولا يمنعني من المتابعة؟

لن تكون طريقة Db.prototype.authenticate متاحة بعد الآن في الإصدار الرئيسي التالي 3.x حيث أن MongoDB 3.6 سيسمح فقط بالمصادقة ضد المستخدمين في admin db ولن يسمح بعد الآن ببيانات اعتماد متعددة على المقبس. يرجى المصادقة باستخدام MongoClient.connect مع بيانات اعتماد المصادقة.

أحاول الاتصال بقاعدة بيانات mlab مع النمس. لقد حاولت تثبيت إصدارات قديمة من النمس.

أستمر في تلقي هذا الخطأ عندما أقوم بتشغيل npm في تطبيق MEAN الخاص بي. لا أستطيع بدء التطبيق. هل أستطيع مساعدتك؟

يرجى قراءة المشكلة بالكامل قبل إرسال سؤال تمت الإجابة عليه بالفعل وإرسال رسالة بريد إلكتروني بدون قصد إلى كل من اشترك في تحديثات هذه المشكلة.

أتساءل كيف حللت ذلك @ JonathanBristow

أنا v read these comments in this page but I still can t أصلح هذه المشكلة !! هل يمكنك التحقق من الرمز الخاص بي؟

هذا هو رمز الاتصال الخاص بي:

الوعد = يتطلب ('بلوبيرد') ؛
mongoose.connect ("mongodb: //:@ cluster0-shard-00-00-xlnqd.mongodb. صافي: 27017 ، الكتلة 0-شارد-00-01-xlnqd.mongodb. صافي: 27017 ، الكتلة 0-شارد-00-02-xlnqd.mongodb. صافي: 27017 /؟ ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin "، الوظيفة (يخطئ) {
إذا (يخطئ) {
console.log (يخطئ) ؛
} آخر {
console.log ('متصل بقاعدة البيانات بنجاح.') ؛
}
}) ؛

وتلقيت هذا التحذير:
"لن يكون أسلوب Db.prototype.authenticate متاحًا في المرة التالية
الإصدار الرئيسي 3.x حيث أن MongoDB 3.6 سيسمح فقط بالمصادقة ضد المستخدمين في
admin db ولن يسمح بعد الآن ببيانات اعتماد متعددة على المقبس. رجاء
المصادقة باستخدام MongoClient.connect مع بيانات اعتماد المصادقة. "

thinkdiff ... إنه warning ، وليس error . يشير التحذير بشكل عام إلى شيء لن يكسر الكود. في اللغة الإنجليزية: لا يوجد شيء خاطئ من الناحية الهيكلية ، فلا تقلق بشأنه.

أقفل هذه المشكلة مؤقتًا لمنع استمرار الرسائل غير المرغوب فيها. سيكون هناك خيار لإيقاف هذا التحذير في 4.11 ، والذي سيتم إصداره هذا الأسبوع لمنع أي تأخير غير متوقع. لا توجد طريقة لتجاوز هذا التحذير في 4.10.x. شكرا لك على صبرك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات