Как читать куки в 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/, это просто потрясающе!

Другие вопросы по тегам