Я пытаюсь понять, когда маркер защиты от подделки кольца создается или вставляется на HTML-страницу. Я использую Compojure / ring / hiccup, но, как я понимаю, мой вопрос действительно о кольце. У меня нет никакой проблемы как таковой: я просто хочу знать, когда и как «вводится» токен защиты от подделки.
Функция anti-forgery-field
из ring.util.anti-forgery
реализована так:
(html (hidden-field "__anti-forgery-token" *anti-forgery-token*)
Если я вызываю эту функцию в REPL, я получаю:
REPL> (println (anti-forgery-field))
<input id="__anti-forgery-token" name="__anti-forgery-token" type="hidden" value="Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*" />
Все еще в REPL, если я попытаюсь получить эту переменную, я получу ту же «несвязанную» переменную:
> ring.middleware.anti-forgery/*anti-forgery-token*
=> #object[clojure.lang.Var$Unbound 0x1eae055 "Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*"]
Я не понимаю, что это за значение «Unbound» и когда оно преобразуется (кольцом?) В фактический доставленный токен. И я особенно не понимаю, как несколько пользователей, подключающихся к веб-сайту, получают каждый отдельный токен (за сеанс).
Эта переменная всегда «не привязана»? Когда / как он становится «связанным» (если это так?)?
Кроме того, если у меня есть идентификатор кольцевого сеанса (скажем, "ring-session = 310678be-9ef6-41a7-a12a-b2417de4a79f"), как я могу увидеть это в Clojure REPL (на сервере сторона), значение соответствующего токена защиты от подделки?