背景
mongooseを使うためにURIにdb名を入れないといけなかった。
これまではmongooseを使っていなかったのでnew MongoClient(dbのURI).db(db名)でOKだった。
dbのURI=mongodb://user:pass@localhost:27017
db名=bookshelf
みたいな感じ、、
mongooseをつかったらdbのURIにdb名を指定しないといけない。
dbのURI=mongodb://user:pass@localhost:27017/bookshelf
としたら
認証エラーとなりdbにコネクトできない。。
解決
dbのURI=mongodb://user:pass@localhost:27017/bookshelf
上記のURIだとbookshelf DBに認証をしに行ってるので認証エラーが起きてる。
私は認証DBはadminなのでadminで認証を行ってbookshelfに接続を行うようにしないといけない。。
調べると、authSourceをオプションでつけるとOKっぽい。
公式にこんなことが書かれてました。
Specify the database name associated with the user's credentials.
If authSource is unspecified, authSource defaults to the defaultauthdb specified in the connection string. If defaultauthdb is unspecified, then authSource defaults to admin.
ユーザーの資格情報に関連するデータベース名を指定します。
authSource が指定されていない場合、authSource のデフォルトは接続文字列で指定された defaultauthdb になります。defaultauthdbが指定されていない場合、authSourceのデフォルトはadminになります。
https://www.mongodb.com/docs/manual/reference/connection-string/
defaultauthdbとは下記の太字部分。
mongodb://user:pass@localhost:27017/bookshelf
なのでbookshelfに認証しようとしてたんだなと分かりました。
最終的には
dbのURI=mongodb://user:pass@localhost:27017/bookshelf?authSource=admin
これでdbに認証付きで接続できました。