http / post токен для защиты от подделки с помощью: edn-params - PullRequest
0 голосов
/ 21 марта 2020

У меня есть следующие настройки:

  1. Macchiato фреймворк для бэкэнда (т.е. ClojureScript на node.js), который моделирует обработку на Ring.
  2. Интерфейс, состоящий из небольшого приложения 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. Я ошибаюсь относительно назначения токена против подделки в целом? Имеет ли это смысл только при передаче данных формы (которыми на самом деле являются мои данные; просто размещение атома напрямую значительно упростит перезагрузку сохраненных данных).

Большое спасибо за любой вклад, который вы можете мне дать!

Оливер

...