Saya mencoba untuk terhubung ke database MongoDB dengan nama pengguna dan kata sandi menggunakan Mongoose di Node.js. Semua dokumen mengatakan bahwa string koneksi akan terlihat seperti
mongodb://username:password@host:port/db
Namun, kata sandi mengandung karakter '@' di dalamnya. Bagaimana saya bisa membuat tali penghubung dari ini sehingga luwak akan mengerti? Dapatkah saya melepaskan '@' dalam kata sandi atau adakah metode penyambungan lain yang harus saya gunakan?
@
dalam kata sandi Anda perlu dikodekan di URL.@
Karakter yang disandikan adalah%40
. Namun,%
karakter tersebut juga perlu dienkode. Jadi, jika kata sandi Anda, katakanlah,,p@ss
kata sandi terakhir yang disandikan harusp%2540ss
Jawaban:
Gunakan sintaks ini:
mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { useNewUrlParser: true }, function(err, db) { } );
sumber
{uri_decode_auth: true}
Sekilas saya melewatkannya , tetapi berhasil setelah saya menyadarinya. Terima kasih.{uri_decode_auth: true}
harus diteruskan sebagai objek terpisah jika Anda berada di NodeJS dan menggunakan driver asli mongoDB.Jika kata sandi Anda memiliki karakter khusus:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
sumber
Gunakan
options
parametermongoose.connect
panggilan untuk menentukan kata sandi alih-alih memasukkannya dalam string URL:mongoose.connect('mongodb://localhost/test', {user: 'username', pass: 'p@ssword'}, callback);
sumber
Coba yang ini, teman-teman:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin", {user: 'viettd', pass: 'abc@123'});
test
adalah nama db sayaadmin
adalah saya db untuk otentikasiviettd
adalah nama penggunaabc@123
saya adalah kata sandi sayasumber
gunakan pwd sebagai gantinya lulus, yang berfungsi untuk saya untuk versi3.2
mongoose.connect('mongodb://localhost/test', {user: 'username', pwd: 'p@ssword'}, callback);
sumber
Saya juga menghadapi masalah yang sama. Saya telah menyelesaikannya dengan menambahkan kata sandi yang dikodekan ke dalam string koneksi. Dan itu bekerja dengan baik.
(1) Encode password Anda dari https://www.url-encode-decode.com
(2) Ganti password Anda dengan yang dikodekan.
(3) Ini harus bekerja dengan baik.
Misalnya:
Sandi Aktual: ABCDEX $ KrrpvDzRTy` @ drf. '; 3X
Sandi Tersandi: ABCDEX% 24KrrpvDzRTy% 60% 40drf.% 27% 3B3X
mongodb: // pengguna1: ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]: 1234, ds1234-test.com: 19889 / mongo-dev? replicaSet = rs-ds123546978 & ssl = true ',
sumber
encodeURIComponent()
ini adalah fungsi bawaan yang dapat melakukan pekerjaan itu.Jika Anda menggunakan driver Node.js asli Mongodb, ini yang berfungsi untuk saya pada versi driver 3.1. Asumsikan url Anda tidak berisi info auth.
MongoClient = require('mongodb').MongoClient; let options = { useNewUrlParser: true, auth: { user: 'your_usr', password: 'your_pwd' } }; MongoClient.connect(url, options, callback);
Atau jika Anda ingin menyertakan info auth di url Anda, lakukan ini:
let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"
sumber
Tidak ada solusi yang disebutkan di atas yang berhasil untuk saya. Saya menelitinya lebih lanjut dan menemukan bahwa saya harus menyertakan parameter useNewUrlParser.
mongoose.connect(db, { useNewUrlParser : true }, err => { if (err){ console.error('Error: ' + err) } else{ console.log('Connected to MongoDb') } })
Dari apa yang saya pahami, Anda memerlukan versi MongoDB tertentu untuk menggunakan ini. Untuk lebih jelasnya, periksa Hindari peringatan "pengurai string URL saat ini tidak berlaku lagi" dengan menyetel useNewUrlParser ke true
Ini untuk menghilangkan peringatan tetapi jelas versi juga mempengaruhi parameter yang diperlukan.
Saya belum menguji semua karakter khusus tetapi pasti berfungsi dengan '@ # $'.
Semoga ini membantu.
sumber
terkadang Anda perlu terhubung ke DB menggunakan alat lain yang menerima string hanya sebagai string koneksi. jadi ubah saja tanda @ dengan% 40
sumber
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` );
sumber
Solusi ini membutuhkan ketergantungan ekstra, tetapi itulah yang akhirnya berhasil bagi saya.
Tambahkan
mongodb-uri
ke proyek Anda dan baris berikut ke kode Anda:const mongoose = require('mongoose') const mongodbUri = require('mongodb-uri') let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri) mongoose.connect(mongooseUri, config.mongo.options)
Saya menemukan saran ini di
mongoose
masalah GitHub # 6044 .sumber
Bagi mereka yang terhubung dengan Mongo Compass. ( MacOSx ) Cukup buka cluster Anda -> Keamanan (Tab) di mongodb.com
Kemudian
edit kata sandi Anda (tekan tombol edit pada nama pengguna Anda):
Anda akan mendapatkan modal / popup / dialog: Tekan edit kata sandi di bawah nama Anda (tombol berwarna abu-abu secara default tetapi muncul tepat di bawah nama Anda) -> Lalu tekan Perbarui Pengguna
Lanjut :
Tutup aplikasi kompas mongo db Anda jika sedang berjalan: (Quit Mongo)
Langkah berikutnya:
Kembali ke Tab Ikhtisar di mongodb.com. dan pilih Hubungkan
Kembali ke OverView:
Langkah berikutnya:
Pada dialog popup pilih Connect with MongoDB Compass kemudian pada tampilan berikutnya pilih versi yang ingin Anda gunakan (sebaiknya VersionNumber sebelumnya ):
Kemudian:
Salin yang URI String disajikan kepada Anda:
Buka kembali aplikasi MongoDB Compass:
Dan itu akan memberi Anda opsi / popup untuk menggunakan String URI terdeteksi: Klik Ya
Langkah terakhir:
Masukkan kata sandi baru Anda dan Hubungkan . Sekarang koneksi Anda sekarang sudah berhasil.
sumber
Gunakan ini,
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true}).then(()=>console.log("DB connected"));
sumber
Jika nama pengguna atau sandi menyertakan tanda @, titik dua:, garis miring /, atau tanda persen karakter%, gunakan pengkodean persen .
Dokumen Mongo: https://docs.mongodb.com/manual/reference/connection-string/
sumber
Saya mencoba ini dengan python dan saya mengalami kesalahan serupa. Ini berhasil untuk saya.
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 mewakili kata sandi Anda dan menganggapnya memiliki karakter khusus (misalnya @ - diwakili oleh% 40) - nama pengguna adalah nama pengguna mongodb Anda, ip - alamat ip Anda dan sample_db database di bawah mongodb yang ingin Anda hubungi.
sumber
Yang ini berhasil untuk saya
Yang ini adalah Pembaruan MongoDB 2020 Jika Anda menggunakan file env terpisah, cukup tambahkan
mongoose.connect('url', { useNewUrlParser: true, useUnifiedTopology: true });
sumber