LaravelのQueue内でAuth::user()が取れたり取れなかったりする
投稿日:
環境
- Laravel 5.8
Laravelで『データが更新されたらアラートメールで更新者情報を送る』というイベントリスナーを作ったのですが、
その中でAuth::user()
の値が環境により「更新者情報」だったり「null」だったりしました。
このイベントリスナーで登録した処理はキュー(Queue)に登録されて非同期に処理されるようにしていたので、
非同期処理では当然ながらAuth::user()
でユーザー情報は取れません。
なので、nullになるのは妥当な動きでした。
では、なぜ環境によりユーザー情報が取れてしまったのかというと
それは.env
のQUEUE_DRIVER
の値が原因でした。
QUEUE_DRIVER=database
等にしているとキューの処理は非同期に処理されるのですが、
QUEUE_DRIVER=sync
ではキューの処理も同期的に処理されるようになります。
キューが同期的に実行されるとユーザーの情報がAuth::user()
で取得できる状態でキューの処理が走るので、
ローカル環境などでQUEUE_DRIVER=sync
にしているとキュー内でAuth::user()
が動いてしまいます。
これも、ちゃんと.env
が本番相当になっている環境でテストをすれば見つけられるので、
ローカル検証だけでリリースをするのではなく、ちゃんと本番相当の環境でもテストしましょう。