Mongoose: Db.prototype.authenticateの非推奨を回避するためにユーザーがURIを提供する場合は、authenticate()の代わりにMongoClient.connect()を使用してください

作成日 2017年05月28日  ·  34コメント  ·  ソース: Automattic/mongoose

私は次のような接続方法を使用しています:

var Mongoose = require('mongoose');
connectionUrl = mongodb://some_login:some_pwd<strong i="6">@some_host</strong>:27017/some_db?authSource=admin
Mongoose.connect(connectionUrl); 

...ドキュメントに示されているように、NodeJSコンソールで次の警告を受け取ります:

Db.prototype.authenticate method will no longer be available 
in the next major release 3.x as MongoDB 3.6 will only allow auth 
against users in the admin db and will no longer allow multiple credentials on a socket. 
Please authenticate using MongoClient.connect with auth credentials.

Connection with database succeeded.

?authSource=adminを省略すると、認証に失敗します)

この段階ではこれは正常ですか(次のマングースのリリースを待つ必要がありますか?)、または今から何を変更する必要がありますか?

バージョン:

ノード:7.10.0
マングース:4.10.3
MongoDB:3.4

ありがとうございました。

confirmed-bug underlying library issue

最も参考になるコメント

+1コメントするだけでなく、これは重大なバグではなく、問題をconfirmed-bugとしてマークし、マングース4.11までは問題ないはずだと明確に回答しました。 これは単なる警告メッセージであり、メッセージをミュートしたい場合は、mongodbロガーを使用してメッセージを非表示にする方法を投稿しました。 私はそれについてお尻になるつもりはありませんが、+ 1メッセージは単に受信トレイに溢れます。これは、スレッドを読むと問題が解決されたことを示すときに特に迷惑です

全てのコメント34件

+1

+1

+1
Mac OS X 10.12.5
ノード:v7.10.0
マングース:4.10.3
MongoDB v3.4.4

+1

うん、それはあなたが実際にdbに触れて何らかの操作(書き込みのような)をしたときにのみ起こるように見えます:

管理データベースにgh_5304 (同じパスワード)というユーザーを作成し、そのユーザーにdbAdminAnyDatabase特権を付与してから、 gh-5304接続文字列でそのユーザーに対して認証しました。 adminテーブルをauthSourceとして指定するテーブル:

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5304`;


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${ error }\n${ error.stack }`);
  });


function exec() {
  return co(function*() {
    const db = mongoose.connect(`mongodb://gh_5304:gh_5304<strong i="11">@localhost</strong>:27017/${ GITHUB_ISSUE }?authSource=admin`);

    const schema = new mongoose.Schema({ name: String });

    const Model = db.model('Model', schema);

    const doc = yield Model.create({ name: 'Test' });
  });
}

ログ出力:

Db.prototype.authenticate method will no longer be available in the next major release 3.x
as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow
multiple credentials on a socket. Please authenticate using MongoClient.connect with auth c
redentials.
successfully ran program

これを「バグ」としてマークしますが、これを何と表現するかはわかりません。 それは間違いなく注意すべき警告です...

authSource問題は、予想される動作atmです。 some_db接続していて、ユーザーがsome_dbデータベースで定義されていない場合は、 authSourceを指定する必要があります。

再:警告、これはマングース認証が現在機能する唯一の方法であるため、マングースが慎重に回避する必要があるものです。 MongoClient.connect()で資格情報を指定した場合でも、mongooseは内部でauthenticate()呼び出します。 現在の計画では、URIを指定するだけの場合は4.11でMongoClient.connect()を使用し、ホストやユーザーなどを使用する場合はmongooseの内部接続ロジックにフォールバックします。

4.11まで、私はこの警告について心配しませんでした。 私の知る限り、MongoDB 3.6とMongoDBドライバー3.0は、今年の後半までリリースされる可能性は低く、これらの変更にはエンドユーザーの変更は必要ありません。

詳細な回答をありがとう@ varunjayaraman @ vkarpov15 ;)

このメッセージを無効/非表示にする方法を知っている人はいますか? プロセスをスポーンすると、それが発生し、神経質になります。 😅

同じ問題があります。

私も同じ問題を抱えています。 マングースを使うべきかどうかわかりません。

+1

ここで同じ問題

+1

+1
マングース:4.10.3
MongoDB v3.4

4.11までmongodbドライバーからの警告をオフにしたい場合は、ここの手順を使用して、mongooseの基盤となるクライアントを使用してロガーを設定できます。

http://mongodb.github.io/node-mongodb-native/2.2/reference/management/logging/

それ以外の場合は問題なく、問題は4.11で解決する必要があります

+1

const mongoose = require( 'mongoose');
var db = mongoose.connect( "mongodb:// saiganesh:[email protected]:61121 / tester");

var Scheme = mongoose.Schema({
タイトル:文字列、
著者:文字列、
本文:文字列、
コメント:[{本文:文字列、日付:日付}]、
日付:{タイプ:日付、デフォルト:Date.now}、
非表示:ブール値、
メタ:{
投票:数、
favs:番号
}
});
module.exports = db.model( 'mongodb'、Scheme);

var BlogPost = require( "./ models / mongodb.js");

//新しいモデルを作成します
var post = new BlogPost({title: "私の最初の投稿"、作成者: "saiganesh"、
本文: "ドキュメントを廃止したい"});

post.save(function(err){
if(err){
エラーを返します。
}
そうしないと {
console.log( "投稿を保存しました");
}
});

エラー:

node .index.js(node:2604)DeprecationWarning:Mongoose:mpromise(mongoose's de
フォールトプロミスライブラリ)は非推奨です代わりに独自のプロミスライブラリをプラグインしてください: //mongoosejs.com/docs/promises.html
MongoDB 3.6は管理者のユーザーに対してのみ認証を許可するため、Db.prototype.authenticateメソッドは次のメジャーリリース3.xでは使用できなくなります。
dbであり、ソケットで複数の資格情報を許可しなくなります。 認証資格情報を使用してMongoClient.connectを使用して認証してください。

events.js:160
投げる; //未処理の「エラー」イベント
^
MongoError:認証に失敗しました。
Function.MongoError.create(C:UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-coreliberror.js:31:11)
C:UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js:497:72
authenticateStragglersで(C:UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js:443:
16)
Connection.messageHandlerで(C:UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionpool.js:4
77:5)
ソケットで。(C:UserssaiganeshDesktopsocket.io-masterexampleschatmongoosedbnode_modulesmongodb-corelibconnectionconnection.js:32
1:22)
EmmitOneで(events.js:96:13)
Socket.emitで(events.js:188:7)
読み取り可能AddChunk(_stream_読み取り可能.js:176:18)
Socket.Readable.push(_stream_written.js:134:10)で
TCP.onread(net.js:548:20)で

このエラーを回避するには、どのMongoDBおよびMongooseバージョンを使用する必要がありますか?

これはバグですよね?

同じ問題が発生しています。 MongoDBシェルバージョンv3.4.2
パッケージjsonの依存関係: "mongodb": "^ 2.2.28"、 "mongoose": "^ 4.10.4"

「マングース」:「〜4.10.2」、仕事です!

さて、node_moduleフォルダーを削除し、package.jsonを変更して、修正された古いバージョンの「mongoose」:「4.10.2」を使用しました。 npmのインストール後、警告メッセージは消えます。

├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └─┬ [email protected] └── [email protected]
これは良いアプローチではないのではないかと思います。 最新のマングースとマングースソフトウェアの間には互換性があるはずです

はい、次のバージョンのバグ修正を待っています

+1コメントするだけでなく、これは重大なバグではなく、問題をconfirmed-bugとしてマークし、マングース4.11までは問題ないはずだと明確に回答しました。 これは単なる警告メッセージであり、メッセージをミュートしたい場合は、mongodbロガーを使用してメッセージを非表示にする方法を投稿しました。 私はそれについてお尻になるつもりはありませんが、+ 1メッセージは単に受信トレイに溢れます。これは、スレッドを読むと問題が解決されたことを示すときに特に迷惑です

あなたの問題については、 @ msaiganeshは、データベース認証に関連する別の問題になります。 別の問題を開いていただけますか?

+2(私と私の同僚のために)

「マングース」:「^ 4.10.4」

このエラーも発生します-バグではなく単なる警告メッセージであり、続行を妨げることはありませんか?

Db.prototype.authenticateメソッドは、次のメジャーリリース3.xでは使用できなくなります。MongoDB3.6は管理データベース内のユーザーに対してのみ認証を許可し、ソケットで複数の資格情報を許可しないためです。 認証資格情報を使用してMongoClient.connectを使用して認証してください。

マングースでmlabデータベースに接続しようとしています。 古いバージョンのマングースをインストールしてみました。

MEANアプリでnpmstartを実行すると、このエラーが発生し続けます。 アプリを起動できません。 誰か助けてもらえますか?

すでに回答済みの質問を送信し、この問題の更新をサブスクライブしているすべての人に誤って電子メールを送信する前に、問題を完全に読んでください。

@JonathanBristowでどうやって解決したの

私はv read these comments in this page but I still can tこの問題を修正します!! 私のコードをチェックしてもらえますか?

これは私の接続コードです:

mongoose.Promise = require( 'bluebird');
mongoose.connect( "mongodb://@ cluster0-shard-00-00-xlnqd.mongodb。 net:27017 、cluster0-shard-00-01-xlnqd.mongodb。 net:27017 、cluster0-shard-00-02-xlnqd.mongodb。 ネット:27017 /?ssl = true&replicaSet = Cluster0-shard-0&authSource = admin "、function(err){
if(err){
console.log(err);
} そうしないと {
console.log( 'データベースに正常に接続されました。');
}
});

そして私はこの警告を受けました:
「Db.prototype.authenticateメソッドは、次のバージョンでは使用できなくなります
MongoDB 3.6としてのメジャーリリース3.xは、
admin dbであり、ソケットで複数の資格情報を許可しなくなります。 お願いします
MongoClient.connectと認証資格情報を使用して認証します。」

@thinkdiff ...これはwarningであり、 errorではありません。 警告は通常、コードを壊さない何かを示します。 英語で:構造的に悪いことは何もありません、それについて心配しないでください。

継続的なスパムを防ぐために、この問題を一時的にロックしています。 4.11でこの警告をシャットオフするオプションがあります。これは、予期しない遅延が発生しない限り、今週リリースされます。 4.10.xではこの警告を回避する方法はありません。 お待ちいただいてありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価