У меня есть следующая установка:
- Macchiato для серверной части (например, ClojureScript на node.js), какие модели обращаются на Ring.
- Внешний интерфейс, состоящий из небольшого приложения React для редактирования данных, хранящихся в атоме (отслеживание различных входных данных).
Я хочу сделать данные, хранящиеся в этом атоме, постоянными, отправив их обработчику в моем бэкэнде. Казалось бы, самый простой способ сделать это — просто взять данные прямо из атома и сделать следующее:
(http/post "https://post.here.url"
{:edn-params
@my-atom})
Однако: по умолчанию Macchiato требует, чтобы POST-запросы включали маркер защиты от подделки (который я в настоящее время храню как атрибут одного из моих HTML-элементов; пожалуйста, сообщите мне, если это плохая практика). Итак, я попробовал следующее:
(http/post "https://post.here.url"
{:edn-params
{:data @my-atom
:__anti-forgery-token "SuperSecretToken"}})
Однако это не работает, поскольку токен отклоняется как недействительный. Токен защиты от подделки, похоже, обрабатывается правильно, только если я объявляю данные как :form-params:
(http/post "https://post.here.url"
{:form-params
{:data (str @my-atom)
:__anti-forgery-token "SuperSecretToken"}})
Описанный выше метод действительно работает, но, конечно, тип MIME установлен неправильно, и мне приходится кое-что делать, чтобы сделать данные EDN доступными на стороне сервера. Подход просто кажется неправильным. Есть ли способ правильно сериализовать данные EDN и по-прежнему передавать маркер защиты от подделки?
Я все еще новичок в этом деле, поэтому, возможно, я упускаю что-то основное. Я ошибаюсь в отношении цели токена защиты от подделки в целом? Имеет ли это смысл только при передаче данных формы (что на самом деле и есть мои данные; просто размещение атома напрямую значительно упростило бы перезагрузку сохраненных данных).
Большое спасибо за любой вклад, который вы можете мне дать!
Оливер