如何在 Elm 中自动将 CSRF 令牌转换为 HTTP 请求 headers?

How to automatically convert CSRF Tokens to HTTP request headers in Elm?

我正在用 Elm 编写单页应用程序以与 Django 后端交互。 Django Rest Framework 在 cookie 中提供了一个 CSRF 令牌,但期望所有请求都在 HTTP header.

中包含该令牌

有没有办法在每个请求中以声明方式指示 Elm return CSRF 令牌作为 HTTP header?例如,我将如何在 JS/Axios:

中配置它
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN"

有一个 暗示从 cookie 中手动提取令牌,然后对每个请求使用 Http.send。那将意味着手动包装所有 HTTP 请求函数。

使用 version 2.0.0 of the elm/http library, you would need to use request 以提供 headers。应用程序使用这些“基本”方法的自定义版本是相当普遍的,这些方法会询问您的环境需要什么。

get httpConfig route tagger decoder =
    Http.request
        { method = "GET"
        , headers = httpConfig.headers
        , url = httpConfig.baseUrl ++ route
        , body = Http.emptyBody
        , expect = Http.expectJson tagger decoder
        , timeout = Nothing
        , tracker = Nothing
        }

post httpConfig route value tagger decoder =
    Http.request
        { method = "POST"
        , headers = httpConfig.headers
        , url = httpConfig.baseUrl ++ route
        , body = Http.stringBody "application/vnd.api+json" (Encode.encode 0 value)
        , expect = Http.expectJson tagger decoder
        , timeout = Nothing
        , tracker = Nothing
        }