【发布时间】:2017-09-09 22:58:25
【问题描述】:
我的应用在前端使用 React,在后端使用 Laravel 5.4。我正在使用fetch() 从后端请求数据。问题是页面加载时会创建两个会话。当发出 POST 请求时,CSRF 中间件会抛出 TokenMismatchException,因为发送的令牌与创建的第一个会话匹配,但它会检查第二个会话。
我在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 请求时,如何防止创建新会话?
【问题讨论】:
-
您使用的是哪个会话驱动程序?
-
我正在使用
file会话驱动程序。 -
如果你对 Laravel API 使用了 JWT Auth(JSON Web Token Authentication) 令牌。因为 API 无法维护状态。因此,如果您需要 Csrf Token 验证,则必须将其作为私有声明存储在元标记或 JWT 有效负载中。
-
@bill 你有没有想过如何防止创建多个会话?
标签: php laravel reactjs session fetch