LaravelのQueue内でAuth::user()が取れたり取れなかったりする


環境

  • Laravel 5.8

Laravelで『データが更新されたらアラートメールで更新者情報を送る』というイベントリスナーを作ったのですが、
その中でAuth::user()の値が環境により「更新者情報」だったり「null」だったりしました。

このイベントリスナーで登録した処理はキュー(Queue)に登録されて非同期に処理されるようにしていたので、
非同期処理では当然ながらAuth::user()でユーザー情報は取れません。
なので、nullになるのは妥当な動きでした。

では、なぜ環境によりユーザー情報が取れてしまったのかというと
それは.envQUEUE_DRIVERの値が原因でした。

QUEUE_DRIVER=database等にしているとキューの処理は非同期に処理されるのですが、
QUEUE_DRIVER=syncではキューの処理も同期的に処理されるようになります。

キューが同期的に実行されるとユーザーの情報がAuth::user()で取得できる状態でキューの処理が走るので、
ローカル環境などでQUEUE_DRIVER=syncにしているとキュー内でAuth::user()が動いてしまいます。

これも、ちゃんと.envが本番相当になっている環境でテストをすれば見つけられるので、
ローカル検証だけでリリースをするのではなく、ちゃんと本番相当の環境でもテストしましょう。