一尘不染

对Laravel API的React Fetch创建新会话

reactjs

我的应用程序在前端使用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请求时,如何防止创建新会话?


阅读 277

收藏
2020-07-22

共1个答案

一尘不染

Laravel 为由应用程序管理的每个活动 用户会话 自动生成CSRF“令牌”
。此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。:https
//laravel.com/docs/5.4/csrf

API是无状态的。sessionAPI中没有类似的东西。因此,您不应在API中使用CSRF令牌。如果您检查Kernel.phplaravel。您将看到Tylor没有VerifyCsrf在API组中添加中间件。建议CSRF仅在具有会话的请求(即有状态请求)中使用。我建议您对API使用基于JWT的身份验证系统。有关JWT的更多信息,请点击此处

您可以将此laravel软件包用于JWT:https :
//github.com/tymondesigns/jwt-auth

2020-07-22