1.9에서 고객 로그인이 작동하지 않습니다


42

방금 Magento 1.9.0.1을 새로 설치했으며 고객 로그인 양식에 이상한 동작이 나타납니다.

Chrome (버전 36)에서는 로그인 양식이 작동하지 않습니다. 방금 로그인 페이지로 리디렉션되었습니다. 오류 메시지가 없습니다. 그러나 새로운 시크릿 창을 열면 정상적으로 로그인 할 수 있습니다. 이것이 쿠키 문제라고 생각하면서 브라우저에서 모든 쿠키를 지우고 다시 시도한 결과 동일한 결과를 얻었습니다. 두 경우 모두 아무런 문제없이 관리자 패널에 로그인 할 수 있습니다.

나는 또한 Firefox와 Safari에서 이것을 시도했다. Firefox 나는 똑같은 일이 발생하지만 쿠키를 지워서 고칠 수는 있지만 Safari에서 복제 할 수 없었습니다.

나는 다른 버전의 Magento에서 이것에 대해 문제가 없었습니다. 버전 1.9에서 Magento가 쿠키를 처리하는 방식에 근본적인 변화가 있습니까? 또는 더 안정적으로 만들 수있는 방법이 있습니까?


링크 공유 및 사용자 / 패스 테스트 가능
MTM

불행히도 그것은 모두 내 작업의 VPN 뒤에 묶여 있습니다.
Josh Pennington

Chrome을 다시 설치하고 확인하십시오.
Niloct

재설치 후 동일한 결과.
Josh Pennington

1
나는 한 번 클라이언트 사이트에서 비슷한 문제를 겪고 있었는데 문제는 사이트가 www예를 들어 없이 액세스되었을 때로 abc.com리디렉션되었습니다 www.abc.com. 이 경우 브라우저가 쿠키를 모두 설정하고 로그인이 특별히 작동을 멈췄지만 www로그인 하지 않은 쿠키를 수동으로 삭제하면 다시 작동하기 시작합니다.
MTM

답변:


38

나는 같은 문제가 있었다 ....

답은 테마가라는 변수를 제공하지 않는다는 것 form_key입니다.

위에서 언급했듯이 다음을 추가해야합니다.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

당신은 바로 후에 그것을 추가 <ul class="form-list">

login.phtml주제에 대한 내 파일 각각에 .

카트 품목의 업데이트 수량에 문제가있을 수 있습니다.

다음의 중요성이 있습니다 form_keys.

처음부터 Magento의 백엔드는 XSS 공격으로부터 보호하는 폼 키를 포함했습니다 [1]. Magento 1.8에서 폼 키는 거의 같은 이유로 프론트 엔드에 들어갔습니다. 브라우저를 사용하여 다른 웹 사이트에서 폼을 제출하지 못하도록 보호합니다. 악의적 인 공격자는 다른 브라우저 탭에 있거나 주문을 완료하는 동안 장바구니에 물건을 추가 할 수 있습니다. 사이트는 Magento 주문 대기중인 브라우저 탭의 실제 HTML 콘텐츠에 액세스 할 수 없으므로 예측 가능한 URL을 사용합니다. 그러나 Magento 상점으로 보낸 모든 것은 쿠키를 제출하므로 세션을 사용합니다.

서버에서 조치를 생성하는 각 양식 또는 각 링크에 고유 키를 추가하면 URL 또는 양식 컨텐츠를 더 이상 예측할 수 없게됩니다. 양식 키는 세션 데이터에 저장되며 서버에 제출할 때 확인됩니다. 일치하지 않으면 양식 키 오류가 발생하고 작업이 완료되지 않습니다.


3
위의 "form_key"숨겨진 입력을 찾은 양식에 추가하십시오. app / design / frontend / base / default / template / persistent / checkout / onepage /
login.phtml

5
사용하기에 훨씬 좋은 코드 스 니펫은 <?php echo $this->getBlockHtml('formkey'); ?>큰 입력 이 아닌 것입니다.
Navarr

폼 닫기 태그 앞에 붙여 넣기 <? php echo $ this-> getBlockHtml ( 'formkey'); ?>
Tahir Yasin

아름다운, 이것은 나를 위해 일했다. 내가 투표 해 주셔서 감사합니다!
CodingMageSheen

와우, 나는 이것을 너무 오랫동안 검색했다.>. <! 고마워요!
Keenora Fluffball

8

다음과 같습니다.

cookie setting issue in Chrome browser

또는

Magento 1.9가 form key validation at customer loggin and register페이지를 사용하고 있습니다.

Post action그 형태 키 확인 using function _validateFormKey()컨트롤러에서를

form key issue: form key missing 이 코드를 양식에 추가하십시오

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />

또는

Cookie domain setting issue 고토 확인 설정이 올바른지 아닌지

...에서 Admin>System>configuration>General>Web>Session Cookie Management


1
로그인 양식에 form_key 필드가 이미 있고 쿠키 도메인을 설정 했는데도 수정하지 않았습니다.
Josh Pennington

브라우저에서 쿠키를 삭제하십시오. 또는 goto accountcontroller.php 확인 (! $ this-> _ validateFormKey ()) {작동 여부
Amit Bera

양식 키가 올바르게 확인되고 있습니다. 실제로 loginPostAction이 완벽하게 실행되는 것처럼 보입니다.
Josh Pennington

1
@AmitBera 내가 당신에게 magento 채팅을 만날까요? 위시리스트 모듈에 관련 문제가 있습니까?
나비

@ AmitBera 키를 설정했지만 여전히 작동하지 않습니다. 또한 accountcontroller.php if (!$this->_validateFormKey()) {에서 false를 반환합니다. 이는 Magento가 제공된 키를 확인할 수 없음을 의미합니다. 왜 그런 일이 일어 납니까?
Arvind07

6

쿠키 관련 문제인 것 같으 므로 쿠키 수명을 86400 미만 으로 늘리십시오.

Sytem -> Configuration -> Web -> Session and Cookie Management


쿠키 수명은 기본적으로 3600 (1 시간)으로 설정 될 수 있습니다. 그러나 최종 사용자 컴퓨터 시간이 서버 시간보다 빨리 실행되면 쿠키는 백엔드뿐만 아니라 Magento 프론트 엔드에도 설정되지 않습니다. 예를 들어, 최종 사용자의 컴퓨터 시간이 서버 시간보다 1 시간 빠릅니다. 즉, 사용자가 로그인하거나 항목을 추가하려고하면 쿠키 (사용자의 세션 ID 보유)가 만료됩니다.


4

향후 독자 :이 문제에 대한 가능한 원인이 많이 있습니다. 로그인 중에 보안상의 이유로 일부 예외 로깅이 억제되므로 문제점이에 표시되지 않습니다 var/log/exception.log.

문제를 진단하려면

  1. 열고 방법으로 app/code/core/Mage/Customer/controllers/AccountController.php이동하십시오 loginPostAction.
  2. 일시적으로 Mage::logException($e);통화를 주석 해제하고 변경 사항을 저장하십시오.
  3. 프론트 엔드에서 다시 로그인하여 동일한 예외를 트리거하십시오.
  4. 예외 로그에서 마지막 오류를보고 조사하십시오.
  5. 더 이상 예외가 발생하지 않을 때까지 이전 두 단계를 반복하십시오.

변경 사항을 취소하는 것을 잊지 마십시오 app/code/core/Mage/Customer/controllers/AccountController.php!

내 문제의 원인은 (잘못된) 모듈 <codePool>community</codePool>대신에 클래스가 있기 때문에 클래스가 자동로드하지 못했습니다 <codePool>local</codePool>.


귀하의 솔루션을 시도했지만 로그인 할 수 없지만 exception.log가 생성되지 않습니다!
Jon

4

지속적인 로그인 phtml 파일에 아래 코드 줄을 추가하여 문제를 해결했습니다.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

1
솔루션 주셔서 감사합니다. 나는 거의 반나절을 낭비했습니다. 그리고 마침내이 솔루션을 찾았습니다.
Gaurav Agrawal

3

반 시간 동안 고군분투 한 후 ok 나는 정확히 어떤 폴더에서 login.phtml을 변경 해야하는지 알았습니다. 그래서가

/app/design/frontend/default/template-name/template/persistent/customer/form/

붙여 넣기

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

<ul class="form-list">

그게 다야.


3

Varnish 캐시를 사용하는 경우 다른 문제가있을 수 있습니다. 다른 곳에서 찾은 솔루션을 인용하고 있습니다. https://github.com/nexcess/magento-turpentine/issues/169

그리고 여기에 우리가 간다 ... 마지막으로 로그인으로이 문제가 발생했을 때 나는 같은 이름을 가진 두 개의 다른 쿠키를 얻었음을 알아 차렸다. "프런트 엔드". "domain"필드. 첫 번째 쿠키에서 도메인 값은 "mydomain.com"이고 두 번째 쿠키는 "www.mydomain.com"입니다. 사용자가 아직 프론트 엔드 쿠키를 가지고 있지 않고 브라우저의 url에 "mydomain.com"을 입력 한 경우 발생합니다. 이렇게하면 잘못된 "프론트 엔드"쿠키가 설정되고 문제가 발생합니다! 서버로 돌아가서 웹 사용자가 "mydomain.com"을 누르면 "www.mydomain.com"을 제공한다는 규칙이 있습니다. 이는 사용자의 브라우저에서 주소 표시 줄의 URL이 "mydomain.com"에서 설정되었음을 의미합니다. "www.mydomain.com"으로 이동하십시오. 이것이 로그인 문제와 관련이 있는지 확실하지 않습니다. 나는 단지 그것을 언급했다. 솔루션 : 테르펜틴 캐싱 옵션의 magento 구성에는 "Normalise host"옵션이 있습니다.이를 활성화해야합니다. 이것으로!이 지저분한 후 더블 프론트 엔드 쿠키가 없습니다! 도움이 되었기를 바랍니다!


2

이 문제의 원인은 사용자 정의 로그인 양식에 form_key가 포함되어 있지 않으며 Magento의 loginPostAction에서 수행되는 양식 키 유효성 검증이 있기 때문입니다.

아래와 같이 고칠 수 있습니다 :

  1. app / design / frontend / [Your-package] / [Your-theme] /template/customer/form/login.phtml로 이동하십시오

검색:

위 코드 바로 다음에 붙여 넣습니다.

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml로 이동하여 동일한 변경 사항을 적용하십시오.

1

위의 내용은 나를 위해 훌륭하게 작동했지만 Magento 1.4.1에서 1.9.1로 업그레이드하여 크게 도약했습니다. 파일은 위의 위치에는 없지만 app / design / frontend / BASE 폴더에는 없었습니다.

/ app / design / frontend / BASE / default / template / persistent / customer / form /

이 기본 폴더는 Magento 1.4 이후로 많은 공통 파일을 보유하고 있기 때문에 읽었습니다.


1

소셜 로그인 확장명을 사용하는 경우 해당 login.phtm 파일에 양식 키도 추가하십시오.


1
<input name = "form_key"type = "hidden"value = "<? php echo Mage :: getSingleton ( 'core / session')-> getFormKey ()?>"/>
Yatin Patel

1

서버에 php-mbstring이 설치되어 있고 활성화되어 있는지 확인하십시오.

그렇지 않은 경우 고객이 로그인하지 않으면 관리자 로그인이 작동합니다.

이 검사는 다음 phpinfo()라인의 로그인 예외 를 출력 하거나 일시적으로 활성화하여 수행 할 수 있습니다 177.app/code/core/Mage/Customer/controllers/AccountController.php

작업이 기록 된 예외 추적에서 고객 비밀번호를 공개 할 수 있습니다.


0

나는 같은 문제가 있었고 모든 쿠키를 삭제하여 해결했습니다. 여러 개의 magento 상점이 있고 동시에 로그인하면 문제가 발생하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.