🐥
Laravel Sanctum でハマったところ
jwt-authを利用していたが、最近は更新されず、webでJWT認証は危ないと言われているので、Laravel Sanctumに移行しようと思い触ってみたところ、小さなミスでかなり時間を取られたので記録しておく。
Laravel Sanctumの基本的な使い方は日本語記事でもたくさん転がってるので、それを参考にPostmanで認証するところまでは簡単にできた。問題は実際にwebアプリからaxiosでログインしようとしたときに419が返ってきてハマった。
問題のコード:
const login = async ({ email, password }) => {
await axios.get('http://localhost:8088/sanctum/csrf-cookie', { withCredentials: true })
await axios.post('http://localhost:8088/login', { email, password })
}
login({ email: 'test@exampe.email', password: 'password' })
解決したコード:
const login = async ({ email, password }) => {
await axios.get('http://localhost:8088/sanctum/csrf-cookie', { withCredentials: true })
await axios.post('http://localhost:8088/login', { email, password }, { withCredentials: true })
}
login({ email: 'test@exampe.email', password: 'password' })
postでloginするときに withCredentialsを設定してなかっただけ。
defaultでtrueにしていればよかったのだろうけど、とりあえず動かすために書いていたので、気づくのにとても時間がかかってしまった。
ちなみに、Postmanでログインするまでで、すでにうまくいかない場合
- PostmanでCacheが働いているか
- HeaderにOriginかReferrerを設定しているか(どっちかないと必ず失敗する)
- envやconfigのSESSION_DOMAINとSANCTUM_STATEFUL_DOMAINSは正しいか(入念に確認したほうがいい)
これらを確かめるとよい。
VSCodeの拡張のThunder Clientからテストしたかったが、これはうまく動かなかった。誰か教えてほしい。
Discussion