Node.jsでMongooseを使用して、ユーザー名とパスワードでMongoDBデータベースに接続しようとしています。すべてのドキュメントは、接続文字列は次のようになっている必要があると述べています
mongodb://username:password@Host:port/db
ただし、パスワードには「@」文字が含まれています。これからマングースが理解できる接続文字列を作成するにはどうすればよいですか?パスワードの「@」をエスケープできますか、または使用する必要がある別の接続方法がありますか?
この構文を使用し、uri_decode_auth
オプションを忘れないでください。
mongoClient.connect("mongodb://username:p%40ssword@Host:port/dbname", {
uri_decode_auth: true
}, function(err, db) {
}
);
パスワードに特殊文字が含まれる場合:
const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;
mongoose.connect
呼び出しのoptions
パラメーターを使用して、パスワードをURLストリングに含める代わりに指定します。
mongoose.connect('mongodb://localhost/test',
{user: 'username', pass: 'p@ssword'},
callback);
私も同じ問題に直面しています。接続文字列にエンコードされたパスワードを追加することで解決しました。そしてそれはうまく機能します。
(1) https://www.url-encode-decode.com からパスワードをエンコードします
(2)パスワードをエンコードされたものに置き換えます。
(3)うまくいくはずです。
例えば:
実際のパスワード:ABCDEX $ KrrpvDzRTy` @ drf。 '; 3X
エンコードされたパスワード:ABCDEX%24KrrpvDzRTy%60%40drf。%27%3B3X
mongodb:// user1:ABCDEX%24KprpvDzRTy%60%40drf.%27%[email protected]:1234、ds1234-test.com:19889/mongo-dev?replicaSet = rs-ds123546978&ssl = true '、
代わりにpassを使用して、バージョン3.2で機能しました
mongoose.connect('mongodb://localhost/test',
{user: 'username', pwd: 'p@ssword'},
callback);
上記のソリューションはどれも私にとってはうまくいきませんでした。さらに調査した結果、useNewUrlParserパラメーターを含める必要があることがわかりました。
mongoose.connect(db, {
useNewUrlParser : true
},
err => {
if (err){
console.error('Error: ' + err)
}
else{
console.log('Connected to MongoDb')
}
})
私が理解していることから、これを使用するにはMongoDBの特定のバージョンが必要です。詳細については、 seNewUrlParserをtrueに設定して、「現在のURL文字列パーサーは非推奨です」という警告を回避してください
警告を取り除くためですが、明らかにバージョンは必須パラメーターにも影響します。
すべての特殊文字をテストしたわけではありませんが、「@#$」で確実に機能します。
お役に立てれば。
これを試して、私の友人:
mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
{user: 'viettd', pass: 'abc@123'});
test
は私のデータベース名ですadmin
は認証用のデータベースですviettd
は私のユーザー名ですabc@123
は私のパスワードです
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"
接続文字列としてのみ文字列を受け入れる他の tools を使用して、DBに接続する必要がある場合があります。そのため、%40で@記号を変更するだけです
Mongo Compassで接続する場合(MacOSx)単純にcluster->Security(Tab)at mongodb.com
次に
editパスワード(ユーザー名の編集ボタンを押してください):
モーダル/ポップアップ/ダイアログが表示されます:名前の下にあるパスワードの編集を押します(デフォルトではボタンはグレー表示されますが、名前のすぐ下に表示されます)->(ユーザーの更新
次:
Mongo db compassアプリケーションが実行されている場合は閉じます:(Quit Mongo)
次のステップ:
Mongodb.com。のOverviewタブに戻り、Connectを選択します
次のステップ:
ポップアップダイアログでMongoDB Compassで接続を選択し、次のビューで使用するバージョンを選択します(できれば以前のバージョン番号):
次に:
Copy提示されたURI文字列:
MongoDB Compassアプリケーションを再度開きます:
そして、検出されたURI文字列を使用するオプション/ポップアップが表示されます:クリックはい
最終ステップ:
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`
);
このソリューションには追加の依存関係が必要ですが、最終的には私にとってはうまくいきました。
プロジェクトにmongodb-uri
を追加し、コードに次の行を追加します。
const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)
この提案はmongoose
のGitHub問題 #6044 で見つけました。