rails真实性令牌如何工作?需要进一步澄清

时间:2015-12-18 21:45:03

标签: ruby-on-rails forms csrf-protection

我正在阅读此stackoverflow评论,该评论描述了rails真实性令牌的工作原理:Understanding the Rails Authenticity Token

并且评分最高的响应始于:

"当用户查看表单以创建,更新或销毁资源时,Rails应用程序会创建一个随机的authenticity_token,将此令牌存储在会话中,并将其放入一个隐藏字段中形成。当用户提交表单时,Rails会查找authenticity_token,将其与会话中存储的那个进行比较,如果匹配,则允许继续请求。"

这对我来说是一个抽象概念,但我想了解它是如何在具体意义上运作的,我想知道这是如何发生的,所以我很清楚它是如何工作的,所以我创建了一个新的rails应用程序并且仅使用一个字段User搭建了一个name,然后我在binding.pry内的Users#create内放置了一个csrf-token,这应该在用户提交表单后直接发生。我添加了一个新用户名后立即开始pry会话,点击提交然后移动创建...所以我在我的网络浏览器中检查了我的应用程序的来源,发现我的rails生成了authenticity token内容值csrf元标记与我表单中隐藏的protect_from_forgery with: :exception值不匹配,如果在同一个pry会话期间检查session.to_hash属性并检查" _csrf_token&#34,则两者都不匹配我得到的值;值。

然后我尝试在Users#new action和Users#create action中设置一个pry并注意" _csrf_token"在我退出并且我的应用程序在Users#create action中移动到pry但没有匹配时,会话上的值并将其与表单字段和元标记的值进行比较。似乎这三个值都不匹配。

然而authenticity_token已在我的应用程序控制器中设置,并且从我在最高评级响应中读到的内容中我希望看到匹配的值......某处。好像什么都不匹配。所以我目前还没有关于rails匹配什么的概念,以便允许表单继续进行并保存数据。

评分最高的回复的作者也说会话中存储了_csrf_token,但我看到的只是session_id(这些是相同的吗?)和' 和正如我所说,他们不匹配任何东西。我看不出任何匹配。

如果rails与我的表单字段中的值匹配,则它似乎不是' _csrf_token'的值。除非它将其转换为幕后的其他内容,然后将该值与隐藏表单字段中的值或其他内容进行匹配。我不觉得我明白发生了什么。

0 个答案:

没有答案