jenssegers/laravel-mongodbのReadMe.mdを見ながらLaravelとmLab上のMongoDBに繋ごうとしたところ、
Authentication Exceptionが起きてしまい接続できませんでした。
首をひねりつつ、PHPのMongoDBドライバから繋いでみたところ、接続できちゃう。Why?
あとついでに、ローカルで建てたMongoDBには普通に接続できる。なんでやねん。
Readme.mdに仕掛けられた落とし穴
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', 27017),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'database' => 'admin' // sets the authentication database required by mongo 3
]
],
実はこれ、しれっと書いてありますけど、実は認証が通るDBが指定されてないといけないようです。
ローカルで建てた時はadminにアクセス権があるけど、mLabではないと。
なるほどわかってしまえばそりゃそーだ。
結論
したがって以下のように修正するといいみたい。
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', 27017),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'database' => env('DB_DATABASE')
]
],
主に利用するDBならアクセス権もあるでしょってことで。
参考
jenssegers/laravel-mongodb: A MongoDB based Eloquent model and Query builder for Laravel (Moloquent)
why project connected the mongo Authentication failed?but client connected succ... · Issue #1028 · jenssegers/laravel-mongodb