私はmongolabにmongodbを持っています。
コマンドで接続すれば
mongo uri/$db -u user -p pass
大丈夫です。
マングースを使って接続すると
mongoose.connect('mongodb://${user}:${pass}@${uri}/${db}')
エラーがあります
MongoError: Authentication failed
マングースを使用しています4.6.1
また、チェックしました-バグは4.4.20
バージョンでは再現されません。 正しく動作します
ユーザー名とパスワードに英数字以外の文字が含まれていますか? 同様の問題は、パスワードで:のような文字を処理することで過去に表面化しました
また、mongooseとmongodbのバージョンは何ですか?
Mongodb'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 、はい、
node.jsを使用してcloud.mongodb.comに接続しましたが、2つの接続が成功した理由と方法がわかりませんが、接続が失敗した場合もあります。
コンソールに表示されます
server / replset / mongosオプションは非推奨になり、すべてのオプションはオプションオブジェクトのトップレベルでサポートされます[poolSize、ssl、sslValidate、sslCA、sslCert、sslKey、sslPass、sslCRL、autoReconnect、noDelay、keepAlive、connectTimeoutMS、fa
mily、socketTimeoutMS、reconnectTries、reconnectInterval、ha、haInterval、replicaSet、secondaryAcceptableLatencyMS、acceptableLatencyMS、connectWithNoPrimary、authSource、w、wtimeout、j、forceServerObjectId、serializeFunctions、ignoreUndefined、raw、bu
fferMaxEntries、readPreference、pkFactory、promiseLibrary、readConcern、maxStalenessSeconds、loggerLevel、logger、promoteValues、promoteBuffers、promoteLongs、domainsEnabled、keepAliveInitialDelay、checkServerIdentity、validateOptions、appname、auth]
(ノード:3268)UnhandledPromiseRejectionWarning:未処理のpromise拒否(拒否ID:1):MongoError:認証に失敗しました
(node:3268)DeprecationWarning:未処理のpromise拒否は非推奨になりました。 将来、処理されないpromise拒否は、ゼロ以外の終了コードでNode.jsプロセスを終了します。
私はそれを試しましたが、うまくいきませんでした、
マングースv4.5.3
mongodb v3.4.7
errMsg:
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)
db urlの最後に?authSource=yourDB&w=1
を追加するだけです
mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
私のためにこの仕事。 &w=1
は重要です
db urlの最後に
?authSource=yourDB&w=1
を追加するだけです
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')