我试图了解何时生成或插入了环防伪造令牌到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中,如果我试图获得这个var,就会得到相同的“未绑定”变量:
> ring.middleware.anti-forgery/*anti-forgery-token*
=> #object[clojure.lang.Var$Unbound 0x1eae055 "Unbound: #'ring.middleware.anti-forgery/*anti-forgery-token*"]我不明白的是,“无界”价值是什么,也不是什么时候它被转换(通过环?)变成一个真正的代金券。我特别不明白连接到这个网站的几个用户是如何得到不同的令牌的(每个会话)。
这个变量总是“无约束”吗?它何时/如何成为“约束”(如果是的话?)
另外,如果我已经获得了环会话ID (例如"ring-session=310678be-9ef6-41a7-a12a-b2417de4a79f"),,我如何在Clojure (在服务器端)看到相应的反伪造令牌的值?
发布于 2017-04-07 21:03:26
它仅在单个请求的上下文(动态环境、当前堆栈(如果愿意)中绑定。把它看作是一个线程局部变量/绑定。在从REPL查看应用程序状态时,您不在请求的上下文中。
它必须是这样的,因为它必须是一个不同的价值为每个用户。如果您在不允许这种动态环境控制的环境中工作,则可以通过显式查找调用模拟类似的行为。
在请求期间,在中间件中建立到正确会话值的绑定,目前在这里:
(binding [*anti-forgery-token* (session-token request)]
;; ...
)https://stackoverflow.com/questions/43285188
复制相似问题