현재 양식 키가 덮어 쓰여지고 잘못된 양식 키가 표시되는 프런트 엔드 양식에 문제가 있습니다. 현재 고객 로그인 양식 에서이 문제를 디버깅하고 있습니다.
이것은 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'.
?>
이제 코드 실행을 계속하면 페이지가 성공적으로 렌더링됩니다.
이제 크롬 브라우저에서 양식 키 숨겨진 입력을 검사하려고하지만 ' KeyA ' 와 완전히 다른 양식 키를 인쇄합니다 . 이 새로운 폼 키의 이름을 ' KeyB '로 지정하겠습니다 .
이제 로그인을 시도하고 양식을 제출하십시오. 전송 된 요청을 검사했으며 실제로 'KeyB'를 반영하는 값의 양식 키 변수를 전달합니다.
의 ' validate '기능에 중단 점을 배치했습니다.
Magento \ Framework \ Data \ Form \ FormKey \ Validator
이것은 내 비교 검사기입니다. 바로 $ formKey와 $ a가 일치해야합니다. 그러나 그렇지 않습니다.
$formKey = $request->getParam('form_key', null); // outputs 'KeyB'
$a = $this->_formKey->getFormKey(); // outputs 'KeyA'
따라서 유효성 검사가 실패하고 오류 메시지없이 로그인 페이지로 다시 리디렉션됩니다 .
참고 사항 :
- 이 동작은 크롬과 Microsoft EDGE에서만 발생합니다.
- Firefox가 제대로 작동하고 덮어 쓰기가 발생하지 않습니다.
- 인쇄 할 때마다 양식 키가 새로 고쳐질 때마다 변경되는 것으로 보입니다. $ retrievedKey는 매번 새로 고침되지 않습니다
내가 시도한 것 :
- 설정 : 업그레이드 및 설정 : 정적 내용 : 배포
- var / cache 및 var / generation을 지 웁니다.
- 브라우저 캐시 및 시크릿 모드 삭제
양식 키를 덮어 쓰는 이유는 무엇입니까?
왜 이런 일이 발생하는지에 대한 도움이나 힌트가 있으면 좋을 것입니다. 읽어 주셔서 감사합니다
업데이트-디버깅을 완료 했으며 양식 키를 다시 설정하여 page-cache.js 가 문제를 일으키는 것으로 나타났습니다 . 'form_key'쿠키가 설정되어 있으면 쿠키를 확인하고 그렇지 않은 경우 새 양식 키를 만들어 쿠키에 저장하기 때문입니다. 문제는 쿠키를 저장할 수 없기 때문에 새로운 양식 키를 계속 생성하는 것입니다.
업데이트-문제를 해결했습니다. 쿠키 도메인 문제 때문입니다. 감사