ขณะนี้ฉันกำลังมีปัญหากับแบบฟอร์มส่วนหน้าโดยที่ปุ่มแบบฟอร์มถูกเขียนทับและแสดงแบบฟอร์มที่ไม่ถูกต้อง ขณะนี้ฉันกำลังดีบักปัญหานี้ในแบบฟอร์มการเข้าสู่ระบบลูกค้า
นี่คือสแน็ปช็อตของรหัสที่ login.phtml ซึ่งฉันตั้งค่าเพื่อดูว่าค่าคีย์ฟอร์มคืออะไร
<?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'.
?>
ตกลงดังนั้นตอนนี้หลังจากที่ฉันดำเนินการรหัสต่อไปก็จะแสดงผลหน้าเว็บสำเร็จ
และตอนนี้ฉันไปตรวจสอบการป้อนคีย์ที่ซ่อนอยู่ในเบราว์เซอร์โครมของฉันอย่างไรก็ตามมันจะพิมพ์คีย์ฟอร์มที่แตกต่างอย่างสิ้นเชิงจาก ' KeyA ' เราจะตั้งชื่อคีย์ฟอร์มใหม่ ' KeyB '
ตอนนี้ฉันลองทำล็อกอินแล้วส่งแบบฟอร์ม ฉันตรวจสอบคำขอที่ถูกส่งไปและมันผ่านตัวแปรสำคัญในรูปแบบของค่าที่สะท้อนถึง 'KeyB'
ฉันได้วางจุดพักไว้ที่ฟังก์ชัน ' ตรวจสอบความถูกต้อง ' ของ
วีโอไอพี \ Framework \ Data \ แบบฟอร์ม \? formkey \ ตรวจสอบ
นี่คือตัวตรวจสอบการเปรียบเทียบของฉัน โดยขวา $ formKey และ $ a ควรตรงกัน อย่างไรก็ตามมันไม่ได้
$formKey = $request->getParam('form_key', null); // outputs 'KeyB'
$a = $this->_formKey->getFormKey(); // outputs 'KeyA'
ดังนั้นการตรวจสอบจึงล้มเหลวและมันนำฉันกลับไปที่หน้าเข้าสู่ระบบโดยไม่มีข้อความแสดงข้อผิดพลาดเลย
สิ่งที่ควรทราบ:
- ลักษณะการทำงานนี้เกิดขึ้นใน chrome และ Microsoft EDGE เท่านั้น
- Firefox ทำงานได้ดีไม่มีการเขียนทับเกิดขึ้น
- ดูเหมือนว่าจะมีการเปลี่ยนแปลงคีย์ฟอร์มที่พิมพ์ออกมาในการรีเฟรชแต่ละครั้ง $ pulledKey ไม่รีเฟรชทุกครั้ง
สิ่งที่ฉันได้ลอง:
- การตั้งค่า: อัพเกรดและตั้งค่า: เนื้อหาคงที่: ปรับใช้
- เคลียร์ var / cache และ var / generation
- ล้างแคชเบราว์เซอร์และโหมดไม่ระบุตัวตน
ฉันคิดไม่ออกว่าทำไมแบบฟอร์มคีย์ถึงถูกเขียนทับ?
ความช่วยเหลือหรือคำแนะนำเกี่ยวกับสาเหตุที่เกิดเหตุการณ์เช่นนี้จะยอดเยี่ยม ขอบคุณที่อ่าน
อัปเดต - ฉันทำการดีบักแล้วและฉันคิดว่าpage-cache.jsทำให้เกิดปัญหาโดยการตั้งค่าคีย์ฟอร์มอีกครั้ง นี่เป็นเพราะข้อเท็จจริงที่ว่ามันกำลังตรวจสอบคุกกี้ของฉันหากมีการตั้งค่าคุกกี้ 'form_key' หากไม่มีให้สร้างรหัสฟอร์มใหม่และบันทึกลงในคุกกี้ ปัญหาคือมันไม่สามารถบันทึกคุกกี้ได้นั่นคือสาเหตุที่มันยังคงสร้างคีย์ฟอร์มใหม่
อัปเดต - ฉันแก้ไขปัญหาแล้ว นี่คือเนื่องจากปัญหาโดเมนคุกกี้ ขอบคุณ