Как читать куки в Elm?
В этом вопросе SO я узнал, что в настоящее время нет простого способа превратить токены CSRF на основе файлов cookie в заголовки HTTP-запросов в Elm. Таким образом, чтобы написать одностраничное приложение (SPA), которое хорошо работает с серверной частью Django Rest Framework, мне нужно вручную получить CSRF-токен из соответствующего значения cookie.
Как мне получить значение cookie в Elm? Предоставляет ли Elm для этого поддержку во время выполнения с помощью какой-либо команды? Или мне нужно получить файл cookie с помощью простого JavaScript и передать его в ELM SPA через порт?
2 ответа
Начиная с Elm 0.9, вам необходимо использовать порты для чтения файла cookie из JavaScript и передачи его обратно в приложение Elm.
Использование Elm 0.19.1
Первое решение:
Использование 2 портов, подписка и некоторый код JS/TS , например @viam0Zah.
Второе решение:
Передайте CSRF в свои флаги при инициализации
const app = Elm.Main.init({
node: document.querySelector("main"),
flags: {
csrfToken: getCookie('csrftoken')
}
});
добавить csrfToken в флаги
type alias Flags =
{ ---
, csrfToken : String
}
И не забудьте добавить декодер для csrfToken:
import Json.Decode as D
flagsDecoder : D.Decoder Flags
flagsDecoder =
D.succeed Flags
|> ---
|> D.required "csrfToken" D.string
Если вы хотите быть более надежным и повысить безопасность типов для обоих решений — флагов и портов, вам следует посетить https://elm-ts-interop.com/, это просто потрясающе!