我的应用程序在前端使用React,在后端使用Laravel 5.4。我fetch()用来从后端请求数据。问题是页面加载时会创建两个会话。TokenMismatchException发出POST请求时,CSRF中间件会引发A,因为发送的令牌与创建的第一个会话匹配,但它会与第二个会话进行检查。
fetch()
TokenMismatchException
POST
我在设置令牌 app.blade.php
app.blade.php
<meta name="_token" content="{{ csrf_token() }}">
并在获取配置中获取令牌
fetchConfig = { headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }, credentials: 'same-origin' }}
以下是解密的会话:
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:{}}}
要求网址: http://localhost/page
http://localhost/page
API网址: http://localhost/api/page
http://localhost/api/page
当React应用发出初始GET请求时,如何防止创建新会话?
GET
Laravel 为由应用程序管理的每个活动 用户会话 自动生成CSRF“令牌” 。此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。:https //laravel.com/docs/5.4/csrf
API是无状态的。sessionAPI中没有类似的东西。因此,您不应在API中使用CSRF令牌。如果您检查Kernel.phplaravel。您将看到Tylor没有VerifyCsrf在API组中添加中间件。建议CSRF仅在具有会话的请求(即有状态请求)中使用。我建议您对API使用基于JWT的身份验证系统。有关JWT的更多信息,请点击此处。
session
Kernel.php
VerifyCsrf
CSRF
您可以将此laravel软件包用于JWT:https : //github.com/tymondesigns/jwt-auth