इसमें "@" के साथ MongoDB पासवर्ड


91

मैं Node.js. में Mongoose का उपयोग करके उपयोगकर्ता नाम और पासवर्ड के साथ एक MongoDB डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं सभी डॉक्स कहते हैं कि कनेक्शन स्ट्रिंग की तरह दिखना चाहिए

  mongodb://username:password@host:port/db

हालाँकि, पासवर्ड में '' '' वर्ण है। मैं इस से एक कनेक्शन स्ट्रिंग कैसे बना सकता हूं जो मानस को समझ में आएगी? क्या मैं पासवर्ड में '@' से बच सकता हूं या क्या मुझे कनेक्ट करने का एक और तरीका है?


1
नहीं - काम नहीं करता है। उन्हें एक 40% एनकोड करना या तो काम नहीं करता है।
IZ।

4
मैं पासवर्ड को एक में बदलने की सिफारिश करूंगा जिसमें @ वर्ण शामिल नहीं है।
सिल्वेन डेफ्रेसने

1
एक स्लेश काम के साथ भागने? "\ _"?
ध्रुवपत्थक

1
@AmolMKulkarni: मुझे पता है कि यह कनेक्शन निर्दिष्ट करने के लिए मैंगोज़ उपयोग का प्रारूप है। लेकिन ओपी यह जानना चाहता था कि वह '@' वाले पासवर्ड का उपयोग कैसे कर सकता है? यह एक पासवर्ड जैसे "p @ ssw0rd" (जो एक लंगड़ा पासवर्ड है)। Url "monbgodb: // यूजरनेम: p @ ssw0rd @ host: port / db" होगा जिसे गलत तरीके से मोंगोज (यानी। यह अंतिम के बजाय पहले @ पर बंटता है) है।
सिल्वेन डेफ्रेसने

1
@आपके पासवर्ड के चरित्र को URL में एनकोड करना होगा। एन्कोडेड @चरित्र है %40। हालांकि, %चरित्र को भी एन्कोड करने की आवश्यकता है। तो, अगर आपका पासवर्ड है, तो हम कहते हैं, p@ssअंतिम एन्कोडेड पासवर्ड होना चाहिएp%2540ss
माइकल पाचेको

जवाबों:


115

इस सिंटैक्स का उपयोग करें:

mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { 
        useNewUrlParser: true
    }, function(err, db) {

    }
);

6
इस उत्तर को अधिक प्यार मिलना चाहिए, यह वास्तव में @ प्रतीक को% 40 में परिवर्तित कर रहा है जो चाल करता है।
jonezy

4
मुझे {uri_decode_auth: true}पहली नज़र में याद आ गया , लेकिन मैंने एक बार इस पर ध्यान दिया। धन्यवाद।
मार्क रेंडले

1
Noobies के लिए, {uri_decode_auth: true}यदि आप NodeJS में हैं और mongoDB के मूल ड्राइवर का उपयोग कर रहे हैं, तो एक अलग ऑब्जेक्ट के रूप में पारित किया जाना चाहिए।
कौशिक शोम चौधरी

5
विकल्प [uri_decode_auth] को चालक संस्करण 3.1 के रूप में समर्थित नहीं है
17

यह विकल्प देता है [uri_decode_auth], जो नवीनतम नहीं है
मोहित सहगल

38

यदि आपके पासवर्ड में विशेष वर्ण हैं:

const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;

यह वह उत्तर है जिसे अधिक प्यार मिलना चाहिए क्योंकि यह पूरी समस्या को ठीक करता है, न कि केवल ओपी के बहुत विशिष्ट उपयोग के मामले में।
spikyjt

29

URL स्ट्रिंग में शामिल करने के बजाय पासवर्ड निर्दिष्ट करने optionsके लिए mongoose.connectकॉल के पैरामीटर का उपयोग करें :

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: 'p@ssword'},
                 callback);

1
मुझे यह तरीका पसंद है क्योंकि एक और लाइन टाइप करने से चोट नहीं लगती।
एस। पटेल

5

यह एक कोशिश करो, मेरे दोस्त:

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: 'abc@123'});

testमेरा db नाम
adminहै प्रमाणीकरण के लिए db
viettdमेरा नाम
abc@123है मेरा उपयोगकर्ता नाम मेरा पासवर्ड है


5

बजाय pwd का उपयोग करें, कि मेरे लिए version3.2 के लिए काम किया

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: 'p@ssword'},
                 callback);

4

मैंने भी इसी मुद्दे का सामना किया है। मैंने कनेक्शन स्ट्रिंग में एन्कोडेड पासवर्ड जोड़कर हल किया है। और यह अच्छी तरह से काम करता है।

(1) https://www.url-encode-decode.com से अपना पासवर्ड एनकोड करें
(2) अपने पासवर्ड को एनकोडेड से बदलें।
(३) यह अच्छी तरह से काम करना चाहिए।

उदाहरण के लिए:
वास्तविक पासवर्ड: ABCDEX $ KrrpvDzRTy '@ drf।'; 3X
एन्कोडेड पासवर्ड: ABCDEX% 24KrpvDzRTy% 60% 40drf।% 27% 3B3X।

MongoDB: // user1: ABCDEX%24KprpvDzRTy%60%40drf.%27%3B3X@dstest.com: 1234, ds1234-test.com: 19,889 / मोंगो-देव replicaSet = RS-ds123546978 और ssl = सच ',


1
सबसे अच्छी सलाह, अविश्वासित स्रोत को पासवर्ड भेजने की सलाह देने के लिए ...
मसराद

जैसा कि @guyarad ने कहा, आपको अपने डेटाबेस पासवर्ड को उजागर नहीं करना चाहिए, और यदि आप नियमित रूप से पासवर्ड बदलते हैं तो यह उपयुक्त नहीं है। और इस टिप्पणी का कारण यह है कि, आपको ऐसा करने के लिए अन्य सॉफ्टवेयर्स / साइट्स की आवश्यकता नहीं encodeURIComponent()है, बिल्ट-इन फंक्शन है जो काम कर सकता है।
27px

4

यदि आप Mongodb देशी Node.js ड्राइवर का उपयोग करते हैं, तो यह मेरे लिए 3.1 ड्राइवर संस्करण के रूप में काम करता है। मान लें कि आपके url में सामान्य जानकारी नहीं है।

MongoClient = require('mongodb').MongoClient;
let options = {
    useNewUrlParser: true,
    auth: {
        user: 'your_usr',
        password: 'your_pwd'
    }
};
MongoClient.connect(url, options, callback);

या यदि आप अपने url में स्रोत जानकारी शामिल करना चाहते हैं, तो यह करें:

let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"

3

ऊपर वर्णित किसी भी समाधान ने मेरे लिए काम नहीं किया। मैंने इस पर और शोध किया और मुझे पता चला कि मुझे useNewUrlParser पैरामीटर को शामिल करना था।

mongoose.connect(db, {
    useNewUrlParser : true
    },
    err => {
    if (err){
        console.error('Error: ' + err)
    }
    else{
        console.log('Connected to MongoDb')
    }
})

जो मैं समझता हूं, आपको इसका उपयोग करने के लिए MongoDB के एक विशिष्ट संस्करण की आवश्यकता है। अधिक जानकारी के लिए, "वर्तमान URL स्ट्रिंग पार्सर को हटाएं" चेक का उपयोग करें "चेतावनी सेट करें" का उपयोग करके सही है।

यह चेतावनी से छुटकारा पाने के लिए है लेकिन स्पष्ट रूप से संस्करण आवश्यक पैरामीटर को भी प्रभावित करता है।

मैंने सभी विशेष पात्रों का परीक्षण नहीं किया है, लेकिन यह निश्चित रूप से '' # $ '' के साथ काम करता है।

उम्मीद है की यह मदद करेगा।


1

कभी-कभी आपको अन्य उपकरणों का उपयोग करके DB से कनेक्ट करने की आवश्यकता होती है जो स्ट्रिंग को केवल कनेक्शन स्ट्रिंग के रूप में स्वीकार करते हैं। इसलिए बस% 40 के साथ @ चिह्न बदलें


उदाहरण के लिए (डमी यूजर और पास की चिंता न करें) इसे बदलें: mongodb: // kipkip: Nolalola22 @@ ds031223.mlab.com: 3d223 / mishlo to: mongodb // kipkip: Nolalola22%40@ds031223.mlab.com: 3d223 / mishlo
डांग

0
Also, if your password contains a percentage, %, 
 Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI

for example, if your password is John%Doe, the new transformed password will be John%25Doe or
If password is Paul%20Wait, New Password will be Paul%2520Wait

mongoClient.connect("mongodb://username:John%25Doe@host:port/dbname", function(err, db) {
// password is John%Doe
    }`enter code here`
);

0

इस समाधान के लिए एक अतिरिक्त निर्भरता की आवश्यकता होती है, लेकिन यह वही था जो मेरे लिए काम करता था।

mongodb-uriअपने कोड में अपनी परियोजना और निम्नलिखित पंक्तियों को जोड़ें :

const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)

मुझे यह सुझाव # 6044 केmongoose GitHub अंक में मिला ।


0

मानगो कम्पास से जुड़ने वालों के लिए। ( MacOSx ) बस अपने क्लस्टर पर जाएं -> सुरक्षा (टैब) mongodb.com पर

क्लस्टर-सुरक्षा

फिर

अपना पासवर्ड संपादित करें (अपने उपयोगकर्ता नाम पर संपादित करें बटन दबाएं): यहाँ छवि विवरण दर्ज करें

आपको एक मोडल / पॉपअप / डायलॉग मिलेगा: अपने नाम के नीचे एडिट पासवर्ड दबाएं (बटन डिफ़ॉल्ट रूप से ग्रे किया गया है लेकिन आपके नाम के ठीक नीचे दिखाई देता है) -> फिर अपडेट यूजर को दबाएं

डायलॉग पॉपअप में EditPassword

अगला :

अपने मोंगो डीबी कम्पास अनुप्रयोग को बंद करें यदि उसका चल रहा है: (मानगो छोड़ो)

मानगो कम्पास से बाहर निकलें

अगला कदम:

Mongodb.com.and में ओवरव्यू टैब पर लौटें कनेक्ट का करें

ओवर व्यू पर लौटें: अवलोकन पर लौटें और कनेक्ट का चयन करें

अगला कदम:

पॉपअप संवाद में MongoDB कम्पास के साथ कनेक्ट का चयन करें और फिर अगले दृश्य में एक ऐसे संस्करण का चयन करें जिसका आप उपयोग करना चाहते हैं (अधिमानतः वर्जनम्बर ): MongoDB कम्पास से जुड़ें

संस्करण का चयन करें

फिर:

कॉपी यूआरआई स्ट्रिंग आप के समक्ष प्रस्तुत किया:

उरी स्ट्रिंग की प्रतिलिपि बनाएँ

फिर से खोलें MongoDB कम्पास आवेदन:

और यह आपको यूआरआई स्ट्रिंग का पता लगाने के लिए विकल्प / पॉपअप देगा: हां पर क्लिक करें उड़ी स्ट्रिंग का पता चला

अंतिम चरण:

अपना नया पासवर्ड डालें और कनेक्ट करें । अब आपका कनेक्शन अब सफल होना चाहिए।नया पासवर्ड डालें और कनेक्ट करें




0

मैं अजगर में यह कोशिश कर रहा था और मुझे एक समान त्रुटि हुई थी। इसने मेरे लिए काम किया।

import pymongo

client = pymongo.MongoClient("mongodb://username:12%40password@ip:27017/sample_db") 
db = client.sample_db
# print the number of documents in a collection
print(db.collection.count())

12% 40password आपके पासवर्ड का प्रतिनिधित्व करता है और मानता है कि इसमें एक विशेष वर्ण है (जैसे @ -% 40 द्वारा दर्शाया गया है) - उपयोगकर्ता नाम आपका mongodb उपयोगकर्ता नाम, ip - आपका IP पता और mongodb के तहत डेटाबेस का नमूना है जिसे आप कनेक्ट करना चाहते हैं।


0

यह एक मेरे लिए काम किया

यह एक MongoDB 2020 अपडेट है यदि आप एक अलग env फ़ाइल का उपयोग कर रहे हैं तो बस अपना जोड़ें

mongoose.connect('url',
{
    useNewUrlParser: true, 
    useUnifiedTopology: true 
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.