Câu trả lời:
Khóa biểu mẫu trong Magento là một biện pháp ngăn chặn giả mạo yêu cầu trang web chéo , nói tóm lại, nó giúp bạn an toàn trước những người cố gắng đăng lên biểu mẫu của bạn (như thêm vào giỏ hàng) từ các trang web khác đặt ra như bạn.
Điều này có thể nguy hiểm vì về mặt lý thuyết ai đó có thể tạo biểu mẫu của riêng họ và đăng lên bất kỳ hành động điều khiển trình xử lý biểu mẫu nào trong cửa hàng của bạn. Bảo vệ CSRF về cơ bản bỏ qua bất kỳ bài đăng nào không kiểm tra tham số form_key kèm theo với bài đăng mẫu.
<?php echo $this->getBlockHtml('formkey')?>
Nó bảo Magento tìm kiếm một khối bố cục có tên "formkey" và xuất nó. Trong Magento, đây thường là một số tệp có trong đó:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Điều này hướng dẫn Magento xuất và lưu trữ khóa biểu mẫu duy nhất cho phiên người dùng. Tất cả các hành động của bộ điều khiển Magento được CSRF bảo vệ sẽ xác minh chống lại điều này trước khi làm bất cứ điều gì có giá trị.
\Magento\Framework\Data\Form\FormKey\Validator
.
Bạn có thể thêm formkey bằng mã này:
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$FormKey = $objectManager->get('Magento\Framework\Data\Form\FormKey');
?>
//Hidden form key field after <form> tag
<input name="form_key" type="hidden" value="<?php echo $FormKey->getFormKey();?>">
Nếu bạn muốn thêm khóa biểu mẫu trong tệp phtml thì hãy sử dụng trực tiếp
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Sử dụng Dependency Injection trong lớp xây dựng của bạn:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Lưu ý: Không sử dụng trình quản lý đối tượng trực tiếp trong tệp phtml
ObjectManager
sử dụng ở frontend đây không phải là một thực hành tốt.
Không cần khởi tạo trình quản lý đối tượng và tất cả, bạn có thể sử dụng.
window.FORM_KEY
Frontend bạn có thể sử dụng:
$block->getKey()
Hi vọng điêu nay co ich!
Cảm ơn