質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

1180閲覧

SPA CSRF token mismatch. が解決できない

riara

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2022/11/29 11:39

前提

Laravel 8とReact 18 でログイン機能を作っています。

フロントはvite環境でhttp://127.0.0.1:5173/loginからログインしようとしています。
Laravel 側はDockerで80ポートです。Fortify と Sanctamを利用しています。
ログイン画面からDBに登録してあるユーザー情報でログインしようとすると発生します。

実現したいこと

CSRF token mismatch. の解消

該当のソースコード

Login.tsx

javascript

1const Login = () => { 2 const login = useLogin() 3 const [email, setEmail] = useState('test@testapi.com') 4 const [password, setPassword] = useState('123456789') 5 6 // フォームログイン時に実行される関数 7 const handleLogin = (e: React.FormEvent<HTMLFormElement>) => { 8 e.preventDefault() 9 login.mutate({ email, password }) 10 } 11 12...

AuthQuery.tsx

javascript

1 2import * as api from "../../api/auth/AuthApi" 3 4const useLogin = () =>{ 5 return useMutation(api.login,{ 6 onSuccess:(user)=> { 7 console.log(user); 8 }, 9 onError:() => { 10 toast.error("ログインに失敗しました") 11 12 }, 13 }) 14} 15 16...

AuthApi.tsx

javascript

1const apiClient = axios.create({ 2 xsrfHeaderName: 'X-CSRF-Token', 3 baseURL: 'http://localhost:80', 4 withCredentials: true, 5 headers: { 6 'Accept': 'application/json', 7 'content-type': 'application/json' 8 } 9}); 10const login = async ({email,password}:{email:string,password:string}) => { 11 await apiClient.get('sanctum/csrf-cookie') 12 const {data} = await apiClient.post<User[]>('api/login', { email, password }) 13 return data 14} 15 16export {login}

env

1APP_NAME=Laravel 2APP_ENV=local 3APP_KEY=XXX 4APP_DEBUG=true 5APP_URL=http://localhost 6 7LOG_CHANNEL=stack 8LOG_DEPRECATIONS_CHANNEL=null 9LOG_LEVEL=debug 10 11DB_CONNECTION=mysql 12DB_HOST=mysql 13DB_PORT=3306 14DB_DATABASE=laravel 15DB_USERNAME=root 16DB_PASSWORD=XXX 17 18SESSION_SECURE_COOKIE=true 19SANCTUM_STATEFUL_DOMAINS=http://127.0.0.1:5173/ 20SESSION_DOMAIN=127.0.0.1 21 22BROADCAST_DRIVER=log 23CACHE_DRIVER=file 24FILESYSTEM_DRIVER=local 25QUEUE_CONNECTION=sync 26SESSION_DRIVER=cookie 27SESSION_LIFETIME=120 28 29MEMCACHED_HOST=127.0.0.1 30 31REDIS_HOST=127.0.0.1 32REDIS_PASSWORD=null 33REDIS_PORT=6379 34 35MAIL_MAILER=smtp 36MAIL_HOST=mailhog 37MAIL_PORT=1025 38MAIL_USERNAME=null 39MAIL_PASSWORD=null 40MAIL_ENCRYPTION=null 41MAIL_FROM_ADDRESS=null 42MAIL_FROM_NAME="${APP_NAME}" 43 44AWS_ACCESS_KEY_ID= 45AWS_SECRET_ACCESS_KEY= 46AWS_DEFAULT_REGION=us-east-1 47AWS_BUCKET= 48AWS_USE_PATH_STYLE_ENDPOINT=false 49 50PUSHER_APP_ID= 51PUSHER_APP_KEY= 52PUSHER_APP_SECRET= 53PUSHER_APP_CLUSTER=mt1 54 55MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 56MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 57

cors.php

php

1 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( 2 '%s%s', 3 'localhost,localhost:80,localhost:3000,127.0.0.1:5173,127.0.0.1,127.0.0.1:8000,::1', 4 env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' 5 ))),

sanctam.php

php

1 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( 2 '%s%s', 3 'localhost,localhost:3000,127.0.0.1:5173,127.0.0.1,127.0.0.1:8000,::1', 4 env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' 5 ))),

試したこと

2日間格闘してるうちに下記リンクにあることはほとんど試しました。
https://teratail.com/questions/smpmo3bbcee51z
https://labor.ewigleere.net/2019/01/31/axios-session-cors/
https://stackoverflow.com/questions/68876100/vue-laravel-sanctum-csrf-token-mismatch-419-error
https://stackoverflow.com/questions/67767619/nuxt-laravel-sanctum-csrf-token-mismatch-419-error?rq=1
https://laravel-news.com/using-sanctum-to-authenticate-a-react-spa

もし解決策を知っている方いらっしゃいましたら何卒よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

riara

2022/11/30 11:55

解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問