لدي mongodb في mongolab.
إذا قمت بالاتصال به عن طريق الأمر
mongo uri/$db -u user -p pass
هذا جيد.
إذا كنت أستخدم النمس وتواصلت عن طريق
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')
لدي خطأ
MongoError: Authentication failed
أستخدم النمس 4.6.1
لقد تحققت أيضًا - لا يتم إعادة إنتاج الخطأ في إصدار 4.4.20
. يعمل بشكل صحيح
هل يتضمن اسم المستخدم وكلمة المرور أي أحرف غير أبجدية رقمية؟ ظهرت مشكلات مماثلة في الماضي مع التعامل مع أحرف مثل: في كلمات المرور
أيضا ، ما هو إصدار النمس والنمس؟
مونجودب "v3"
لا ، لا توجد رموز غير أبجدية رقمية.
حسنًا ، ما هي قاعدة البيانات التي يتم تعريف المستخدم عليها؟ يتم تحديد نطاق مستخدمي MongoDB إلى dbs ، حتى إذا كان لديهم امتيازات عبر ديسيبل ، لذلك إذا لم يتم تعريف المستخدم الذي حددته على db
فستحتاج إلى وضع شيء مثل mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin')
إذا كان المستخدم يتم تعريفه على "admin" ديسيبل.
أيضًا ، إذا كنت تستخدم mongodb 3.x ، فربما تستخدم مصادقة SCRAM-SHA-1 أم لا. جرب كلاً مما يلي:
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')
@ vkarpov15 ، نعم ، لقد ساعدت! شكرا جزيلا!
لقد أجريت اتصالًا بـ cloud.mongodb.com باستخدام node.js ولكني لا أفهم لماذا وكيف أجريت اتصالين ناجحين ولكن في أوقات أخرى كانت الاتصالات غير ناجحة.
في وحدة التحكم أرى
تم إهمال خيارات الخادم / إعادة الضبط / mongos ، وجميع خياراتها مدعومة في المستوى الأعلى من كائن الخيارات [poolSize ، ssl ، sslValidate ، sslCA ، sslCert ، sslKey ، sslPass ، sslCRL ، autoReconnect ، noDelay ، keepAlive ، connectTimeoutMS ، fa
mily ، socketTimeoutMS ، recnectTries ، recnectInterval ، ha ، haInterval ، replicaSet ، SecondaryAcceptableLatencyMS ، AcceptLatencyMS ، connectWithNoPrimary ، authSource ، w ، wtimeout ، j ، forceServerObjectId ، serializeFunctions ، ignoreUndefined ، raw
fferMaxEntries، readPreference، pkFactory، trustLibrary، readConcern، maxStalenessSeconds، loggerLevel، logger، PromotionValues، promBuffers، promotionLongs، domainsEnabled، keepAliveInitialDelay، checkServerIdentity، validateOptions، appname، auth]
(العقدة: 3268) UnhandledPromiseRejectionWarning: رفض الوعد الذي لم تتم معالجته (معرّف الرفض: 1): MongoError: فشل المصادقة
(العقدة: 3268) تحذير الإيقاف: تم إهمال رفض الوعد الذي لم تتم معالجته. في المستقبل ، ستؤدي حالات رفض الوعد التي لم يتم التعامل معها إلى إنهاء عملية Node.js برمز إنهاء غير صفري.
لقد جربته ، لكن لم أعمل ،
النمس v4.5.3
mongodb v3.4.7
رسالة
MongoError: Authentication failed.
14|gougouS | at Function.MongoError.create (/www/website/gougouServer/source/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)
فقط أضف ?authSource=yourDB&w=1
إلى نهاية عنوان url db
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
هذا العمل بالنسبة لي. &w=1
مهم
فقط أضف
?authSource=yourDB&w=1
إلى نهاية عنوان url db
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
هذا العمل بالنسبة لي.&w=1
مهم
شكرا لك سيدي. : 3 إجابة جيدة
التعليق الأكثر فائدة
حسنًا ، ما هي قاعدة البيانات التي يتم تعريف المستخدم عليها؟ يتم تحديد نطاق مستخدمي MongoDB إلى dbs ، حتى إذا كان لديهم امتيازات عبر ديسيبل ، لذلك إذا لم يتم تعريف المستخدم الذي حددته على
db
فستحتاج إلى وضع شيء مثلmongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authSource=admin')
إذا كان المستخدم يتم تعريفه على "admin" ديسيبل.أيضًا ، إذا كنت تستخدم mongodb 3.x ، فربما تستخدم مصادقة SCRAM-SHA-1 أم لا. جرب كلاً مما يلي:
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=SCRAM-SHA-1')
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}?authMechanism=MONGODB-CR')