Moja aplikacja używa React na interfejsie użytkownika i Laravel 5.4 na zapleczu. Używam fetch()
do żądania danych z zaplecza. Problem polega na tym, że dwie sesje są tworzone po załadowaniu strony. Wywoływarka TokenMismatchException
jest zgłaszana przez oprogramowanie pośredniczące CSRF po otrzymaniu żądania POST
, ponieważ wysłany token odpowiada pierwszej utworzonej sesji, ale sprawdza się względem drugiej.React Fetch to Laravel API Tworzy nową sesję
mam ustawienie token w app.blade.php
<meta name="_token" content="{{ csrf_token() }}">
i chwytając token w config zwrcania
fetchConfig = {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
credentials: 'same-origin'
}}
Oto odszyfrowane sesje:
a:3:{s:6:"_token";s:40:"7obvOzPaqqJDtVdij8RaqrvmTFLjKA2qnvYMxry6";s:9:"_previous";a:1:{s:3:"url";s:24:"http://localhost/page";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
a:3:{s:6:"_token";s:40:"5Aiws9Qy72YzlkfWX81zkhzrSeiMDYjFWiLeDAwN";s:9:"_previous";a:1:{s:3:"url";s:41:"http://localhost/api/page";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
Zapytanie URL: http://localhost/page
API URL: http://localhost/api/page
Jak mogę zapobiec nową sesję z tworzone kiedy React aplikacja sprawia, że jego początkowy GET
prośbę?
Który kierowca sesja używasz? –
Używam sterownika 'file' session. – bill
Jeśli użyłeś tokenu JWT Auth (JSON Web Token Authentication) do Laravel API. ponieważ API nie może utrzymać stanu.Tak więc, jeśli potrzebujesz weryfikacji Token Token, musisz zaimplementować ją, przechowując ją w metatagu lub w ładunku JWT jako prywatne roszczenie. –