标题在Python-Flask中的跨站点POST请求中被忽略

问题描述

我正在尝试进行跨站点POST请求。我的前端是react native(javascript),后端是Flask。一切都适用于GET请求。但是当需要某些特定的标头时,我的POST请求都无法正常工作。

这是我的JavaScript请求:

export const postLike = async (note_id) => {
  try {
    let csrf_access_token = getCookie("csrf_access_token");
    const csrf_refresh_token = getCookie("csrf_refresh_token");
    const myHeaders = new Headers();
    myHeaders.append("X-CSRF-TOKEN-ACCESS",csrf_access_token);
    myHeaders.append("X-CSRF-TOKEN-REFRESH",csrf_refresh_token);
    let response = await fetch(
      BINDERS_MAIN_COMMENTS + `/notes/${note_id}/like`,{
        method: "post",credentials: "include",headers: myHeaders,}
    );
    if (response.ok) {
      return true;
    } else {
      return false;
    }
  } catch (error) {
    return false;
  }
};

getCookie函数用于从cookie中获取一些凭证并将其添加标题中:

function getCookie(name) {
  if (!document.cookie) {
    return null;
  }

  const xsrfCookies = document.cookie
    .split(";")
    .map((c) => c.trim())
    .filter((c) => c.startsWith(name + "="));

  if (xsrfCookies.length === 0) {
    return null;
  }
  return xsrfCookies[0].split("=")[1];
}

我的问题:这些标头(X-CSRF-TOKEN-ACCESS和X-CSRF-TOKEN-REFRESH)未在我的POST请求中发送。

请参见下面的选项预检请求和POST请求的屏幕截图,您将看到这两个标头在POST请求中具有空值:

  • 选项请求

    OPTION request

  • POST请求

    POST request

您在标题中看到错误吗?

这是我的Python配置:

class Config:
    JWT_TOKEN_LOCATION = ['cookies']
    JWT_COOKIE_SECURE = True
    JWT_COOKIE_SAMESITE = "None"
    JWT_REFRESH_TOKEN_EXPIRES = datetime.timedelta(days=15)
    JWT_COOKIE_CSRF_PROTECT = True  # set_refresh_cookies() will Now also set the non-httponly CSRF cookies
    JWT_CSRF_CHECK_FORM = True
    JWT_ACCESS_CSRF_HEADER_NAME = "X-CSRF-TOKEN-ACCESS"
    JWT_REFRESH_CSRF_HEADER_NAME = "X-CSRF-TOKEN-REFRESH"
app.config.from_object(APP_CONfig[CONfig_ENV])
    cors = CORS(
        app,resources={
            "/*": {
                "origins": [
                    "http://127.0.0.1","http://127.0.0.1:19006","http://192.168.0.13","http://192.168.0.13:19006","http://192.168.1.38:19006","http://192.168.1.38",]
            }
        },supports_credentials=True,send_wilcard=True,always_send=True,vary_header=True,expose_headers=["Content-Type","X-CSRF-TOKEN-ACCESS","X-CSRF-TOKEN-REFRESH",],allow_headers=["Content-Type",)

最后的信息,这是一个HTTPS连接。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...