根本的な間違いが二つ混ざってる。
今の思い込みを捨てない限り絶対に解決しない。
・Laravelのapiルートは基本的には外部から利用するもの。
http://localhost:8000/ でLaravelもJSも動いてるプロジェクトの内部から利用するものではない。
ここ数年の初心者はみんな同じ勘違いしている。「APIはJSから使うもの」という完全に間違った思い込みを捨てられないので全部間違えてる。
apiはステートレス=クッキーもセッションも無効。
apiではクッキーはセットされないんだからヘッダーなんか見ても無駄。
例外は「SactumのSPA認証を使ってる場合」だけどInertiaなので一切関係ない。
Laravelはこの辺りの機能の組み合わせが複雑化しすぎているのでやりたいことに対して適切なスターターキットを選ばないとやりたいことができない。
・InertiaならFromヘルパーを活用する
axiosは不要。
https://inertiajs.com/forms
breezeでのLaravel公式の使い方を見ればform.postで送信してるだけと分かる。これでajaxでの送信と同じ動作になるのでaxiosで送信なんてしなくていい。Inertia内部でもaxiosを使っているので同じ。
const form = useForm({
email: '',
password: '',
remember: false,
});
const submit = () => {
form.post(route('login'), {
onFinish: () => form.reset('password'),
});
};
Inertiaを使うならルートはapiではなくwebを使う。
上の例でもroute('login')
に送信している。これはweb側。
「Inertiaを使う」というのはBladeのviewをVueやReactに置き換えてるだけでLaravel側は今まで通り普通にwebルートを使うってこと。
Laravel側をモダンフロントに合わせて特殊なことしなくていいのがInertiaなんだからapiルートを使うような特殊なことしてる時点で間違えてる。
webルートなのでクッキーもセッションも有効でCSRFも認証も自動的に解決する。CORSなどのモダンフロント特有のあれこれを無視できるのがInertiaのメリット。
Inertiaを使ってるなら間違った思い込みで「axiosでapiに送信」なんてせずにInertiaの使い方を覚える。
本当にやりたいのは「axiosでapiに送信」ならInertiaを選んだことが間違いなのでプロジェクト作成からやり直す。