如何在 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
}
我正在用 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"
有一个 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
}