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