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