web-dev-qa-db-ja.com

「@」を含むMongoDBパスワード

Node.jsでMongooseを使用して、ユーザー名とパスワードでMongoDBデータベースに接続しようとしています。すべてのドキュメントは、接続文字列は次のようになっている必要があると述べています

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

ただし、パスワードには「@」文字が含まれています。これからマングースが理解できる接続文字列を作成するにはどうすればよいですか?パスワードの「@」をエスケープできますか、または使用する必要がある別の接続方法がありますか?

71
iZ.

この構文を使用し、uri_decode_authオプションを忘れないでください。

mongoClient.connect("mongodb://username:p%40ssword@Host:port/dbname", { 
    uri_decode_auth: true 
    }, function(err, db) {

    }
);
85
Andrey Hohutkin

パスワードに特殊文字が含まれる場合:

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

mongoose.connect 呼び出しのoptionsパラメーターを使用して、パスワードをURLストリングに含める代わりに指定します。

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

私も同じ問題に直面しています。接続文字列にエンコードされたパスワードを追加することで解決しました。そしてそれはうまく機能します。

(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 '、

5
prisan

代わりにpassを使用して、バージョン3.2で機能しました

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

上記のソリューションはどれも私にとってはうまくいきませんでした。さらに調査した結果、useNewUrlParserパラメーターを含める必要があることがわかりました。

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

私が理解していることから、これを使用するにはMongoDBの特定のバージョンが必要です。詳細については、 seNewUrlParserをtrueに設定して、「現在のURL文字列パーサーは非推奨です」という警告を回避してください

警告を取り除くためですが、明らかにバージョンは必須パラメーターにも影響します。

すべての特殊文字をテストしたわけではありませんが、「@#$」で確実に機能します。

お役に立てれば。

3
Thierry

これを試して、私の友人:

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

testは私のデータベース名です
adminは認証用のデータベースです
viettdは私のユーザー名です
abc@123は私のパスワードです

3
Viet Tran

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"
2
toadead

接続文字列としてのみ文字列を受け入れる他の tools を使用して、DBに接続する必要がある場合があります。そのため、%40で@記号を変更するだけです

1
dang

Mongo Compassで接続する場合(MacOSx)単純にcluster->Security(Tab)at mongodb.com

Cluster-Security

次に

editパスワード(ユーザー名の編集ボタンを押してください): enter image description here

モーダル/ポップアップ/ダイアログが表示されます:名前の下にあるパスワードの編集を押します(デフォルトではボタンはグレー表示されますが、名前のすぐ下に表示されます)->(ユーザーの更新

EditPassword in Dialog Popup

Mongo db compassアプリケーションが実行されている場合は閉じます:(Quit Mongo)

Quit Mongo Compass

次のステップ:

Mongodb.com。のOverviewタブに戻り、Connectを選択します

OverViewに戻る: return to overview and select connect

次のステップ:

ポップアップダイアログでMongoDB Compassで接続を選択し、次のビューで使用するバージョンを選択します(できれば以前のバージョン番号): Connect with MongoDB Compass

select Version

次に:

Copy提示されたURI文字列

Copy Uri String

MongoDB Compassアプリケーションを再度開きます:

そして、検出されたURI文字列を使用するオプション/ポップアップが表示されます:クリックはいuri string detected

最終ステップ:

新しいパスワードとConnectを入力します。これで接続が成功するはずです。 Enter new password and Connect

0
RileyManda
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)

この提案はmongooseのGitHub問題 #6044 で見つけました。

0
lpacheco