首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >戒指的防伪令牌是什么时候插入的?

戒指的防伪令牌是什么时候插入的?
EN

Stack Overflow用户
提问于 2017-04-07 18:48:48
回答 1查看 678关注 0票数 5

我试图了解何时生成或插入了环防伪造令牌到HTML页面中。我正在使用Compojure / ring / hiccup,但我认为我的问题实际上是关于环的。我本身没有任何问题:我只想知道防伪令牌何时以及如何被“注入”。

来自anti-forgery-fieldring.util.anti-forgery函数实现如下:

代码语言:javascript
复制
(html (hidden-field "__anti-forgery-token" *anti-forgery-token*)

如果我在REPL中调用这个函数,就会得到:

代码语言:javascript
复制
REPL>  (println (anti-forgery-field))
<input id="__anti-forgery-token" name="__anti-forgery-token" type="hidden" value="Unbound: #&apos;ring.middleware.anti-forgery/*anti-forgery-token*" />

在REPL中,如果我试图获得这个var,就会得到相同的“未绑定”变量:

代码语言:javascript
复制
> 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 (在服务器端)看到相应的反伪造令牌的值?

EN

回答 1

Stack Overflow用户

发布于 2017-04-07 21:03:26

它仅在单个请求的上下文(动态环境、当前堆栈(如果愿意)中绑定。把它看作是一个线程局部变量/绑定。在从REPL查看应用程序状态时,您不在请求的上下文中。

它必须是这样的,因为它必须是一个不同的价值为每个用户。如果您在不允许这种动态环境控制的环境中工作,则可以通过显式查找调用模拟类似的行为。

在请求期间,在中间件中建立到正确会话值的绑定,目前在这里:

forgery.clj#L67

代码语言:javascript
复制
(binding [*anti-forgery-token* (session-token request)]
  ;; ...
  )
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43285188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档