У меня есть следующие настройки:
- 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 и по-прежнему передавать маркер защиты от подделки?
Я все еще новичок в этом, так что, может быть, я что-то упускаю из основы c. Я ошибаюсь относительно назначения токена против подделки в целом? Имеет ли это смысл только при передаче данных формы (которыми на самом деле являются мои данные; просто размещение атома напрямую значительно упростит перезагрузку сохраненных данных).
Большое спасибо за любой вклад, который вы можете мне дать!
Оливер