前端表单密钥被覆盖


11

我目前在前端表单上遇到问题,其中表单密钥被覆盖并显示不正确的表单密钥。我目前正在客户登录表单上调试此问题。

这是login.phtml上的代码的快照,我设置了代码以查看formkey的值。

  <?php
      $retrievedKey =  $block->getBlockHtml('formkey');
      echo $retrievedKey ;
      // i made a breakpoint and inspected $retrievedKey, it returned a html output <input> ... </input> with a form key value of, let's name it 'keyA'.
  ?>

好的,所以现在我继续执行代码后,它将成功呈现页面。

现在,我要检查chrome浏览器上的表单键隐藏输入,但是,它打印出与“ KeyA ” 完全不同的表单键。让我们将此新表单密钥命名为“ KeyB ”。

现在,我尝试登录并提交表格。我检查了发送过来的请求,它确实传递了一个反映“ KeyB”的值的表单键变量。

我在“ 验证 ”功能中放置了一些断点

Magento \ Framework \ Data \ Form \ FormKey \ Validator


这是我的比较检查器。正确地,$ formKey和$ a应该匹配。但是,事实并非如此。

 $formKey = $request->getParam('form_key', null); // outputs 'KeyB'
 $a = $this->_formKey->getFormKey(); // outputs 'KeyA'


因此,验证失败,并且将我重定向到登录页面,却没有任何错误消息

注意事项:

  1. 仅在chrome和Microsoft EDGE中会出现这种现象。
  2. Firefox正常运行,没有覆盖
  3. 每次刷新时,打印出的表单密钥似乎都在更改。$ retrievedKey不会每次都刷新

我尝试过的事情:

  1. 设置:升级和设置:静态内容:部署
  2. 清除var / cache和var / generation
  3. 清除浏览器缓存和隐身模式

我只是无法理解为什么要覆盖表单键?

任何有关这种情况发生的帮助或提示都将非常有用。谢谢阅读

更新-我已经进行了一些调试,我发现page-cache.js通过再次设置form键导致了问题。这是由于以下事实:正在检查我的cookie是否设置了“ form_key” cookie,如果未设置,则创建一个新的表单密钥并保存到cookie。问题是,它无法保存cookie,这就是为什么它会继续创建新的表单键的原因。

更新-我已经解决了这个问题。这是由于Cookie域问题引起的。谢谢


非常感谢您记录修复程序。用了一段时间的调试看到相同的行为问题-形式键被一次又一次的前端产生的
帕拉斯苏德

1
在我的情况下,这是magento系统缓存,因为它是从暂存环境迁移的。存储->设置->配置->系统->全页缓存->缓存应用程序:设置为内置缓存(如果不确定清漆是否启用)。
米格尔·费利佩·吉伦·卡洛,

有完全相同的问题,并且也在验证中查看表单密钥。您说这是由于Cookie域问题引起的,能否分享您如何解决该问题?感谢
Long MKNguyễn'18

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.