Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Flask会话无法在react前端应用程序上创建cookie(使用设置cookie响应头) 问题_Reactjs_Flask_Wsgi_Setcookie_Flask Session - Fatal编程技术网

Reactjs Flask会话无法在react前端应用程序上创建cookie(使用设置cookie响应头) 问题

Reactjs Flask会话无法在react前端应用程序上创建cookie(使用设置cookie响应头) 问题,reactjs,flask,wsgi,setcookie,flask-session,Reactjs,Flask,Wsgi,Setcookie,Flask Session,我试图使用服务器端会话(保存在PSQL db上),但它们不会在请求之间持久化 描述 我正在本地运行我的应用程序,它由两部分组成 在我的IP:2501上运行的后端 在我的IP:3000上运行的前端 现在根据我的理解,Flask将会话保存在PSQL的“session”表中(因为我们存储的是服务器端会话),并且来自该特定行的ID以响应头的形式发送到客户端,即“Set Cookie” 上面描述的每件事都在工作,但是当React前端(或浏览器)启动时接收此标头时,它不会从中创建cookie,因为会话id未

我试图使用服务器端会话(保存在PSQL db上),但它们不会在请求之间持久化

描述 我正在本地运行我的应用程序,它由两部分组成

  • 在我的IP:2501上运行的后端
  • 在我的IP:3000上运行的前端
  • 现在根据我的理解,Flask将会话保存在PSQL的“session”表中(因为我们存储的是服务器端会话),并且来自该特定行的ID以响应头的形式发送到客户端,即“Set Cookie”

    上面描述的每件事都在工作,但是当React前端(或浏览器)启动时接收此标头时,它不会从中创建cookie,因为会话id未存储在前端中,然后前端无法将其发送到后端,因为它无法获取关联的会话数据,导致每次会话都为空

    :(

    到目前为止我试过的东西。。
  • 已完成在返回响应时允许所有类型的标头

     `response.headers.add('Access-Control-Allow-Headers', "Origin, X-Requested-With, Content-Type, Accept, x-auth")`
    
  • 已完成允许前端和后端使用withCredentials标头属性

  • 使用“session\u COOKIE\u HttpOnly”配置属性从会话中删除了HttpOnly参数

  • 已完成将“会话\u COOKIE\u域”设置为与前端相同

  • 如果我通过POSTMAN调用API,则会话将持久化,因为cookie保存在POSTMAN中

  • 如果我在chrome上运行应用程序——禁用web安全,那么它也可以工作

  • 仅需要以下配置:
  • 发送带有标题的请求(REST/GraphQL),标题为
    withCredentials=true
  • 从后端添加
    Access Control Allow Credentials=true
    标题
  • 在Axios(前端REST API)上。

    import axios from 'axios';
    
    export const restApi = axios.create({
      baseURL: urlBuilder.REST,
      withCredentials: true
    });
    
    restApi.interceptors.request.use(
      function(config) {
        config.headers.withCredentials = true;   # Sending request with credentials
        return config;
      },
      function(err) {
        return Promise.reject(err);
      }
    );
    
    阿波罗上(前端图)

    在Python烧瓶(后端)


    如何与后端通信?是从浏览器还是通过前端?我一直在使用
    axios
    库向后端发出请求,并且我必须手动设置传出请求的会话头。我使用
    axios
    reactJS
    前端发送请求。我还知道我必须手动设置传出请求的会话标头。我面临的问题是,我的后端正在发送set-Cookie响应标头,但前端/浏览器不允许保存Cookie。请在此处添加一些说明。我制作了一个基本应用程序,演示了此方法确实有效,您可以下载在这里刊登广告:
    import {
      ApolloClient,
      ApolloLink
    } from 'apollo-boost';
    
    const authLink = new ApolloLink((operation, forward) => {
      operation.setContext({
        fetchOptions: {
          credentials: 'include' .         # Sending request with credentials
        }
      });
      return forward(operation);
    });
    
    @app.after_request
    def middleware_for_response(response):
        # Allowing the credentials in the response.
        response.headers.add('Access-Control-Allow-Credentials', 'true')
        return response