ogp

Laravelエラー DecryptException The MAC is invalid.

2021-11-02

イントロダクション

一緒に仕事をしている同僚から以下のエラーが出て何も操作できなくなったと連絡があり、対処を見つけるまで少し苦労したので備忘録として残します。


Illuminate\Contracts\Encryption\DecryptException
The MAC is invalid.



おそらくの原因

Laravelでは環境変数に APP_KEY という値が存在し、 php artisan key:generate を実行することで更新されます。この値はセッションやクッキー等の複合に使用されるようで、その際にエラーが起きているものと思います。

「おそらく」と書いたのは、同僚が APP_KEY を更新した覚えがないと言っているからです。


このときはVSCodeのdevcontainerを試したり色々していたので、事故的に消えたか変更になったのではないかと思っています。(もちろん他の原因だった可能性もあるのですが…)


対処法

$ php artisan cache:clear

私達の環境ではキャッシュクリアで直りました。

ブラウザのcookieを消したら直るとか色々情報は出てきたのですが、検証したところこれだけで大丈夫そうでした。


調べていて気になったこと

調べていると、 APP_KEY を変更するとパスワードの認証が出来なくなる。という情報が散見されたのですが、そんな事はありません。

Laravel Authのパスワードの格納はpassword_hash関数によって実装されており、APP_KEY をsaltやpepperに使っているわけではありません。


しかしながら APP_KEY を更新してしまうとセッションやパスワードリセットトークン等が無効になってしまう様なので、むやみに更新しないに越したことはないですね。