การเข้าสู่ระบบลูกค้าไม่ทำงานใน 1.9


42

ฉันเพิ่งติดตั้ง Magento 1.9.0.1 ใหม่และฉันเห็นพฤติกรรมแปลก ๆ บางอย่างกับแบบฟอร์มการลงชื่อเข้าใช้ของลูกค้า

ใน Chrome (รุ่น 36) แบบฟอร์มเข้าสู่ระบบไม่ทำงาน ฉันเพิ่งเปลี่ยนเส้นทางไปที่หน้าเข้าสู่ระบบ ไม่มีข้อความแสดงข้อผิดพลาด อย่างไรก็ตามเมื่อฉันเปิดหน้าต่างใหม่ที่ไม่ระบุตัวตนฉันสามารถเข้าสู่ระบบได้ดี การคิดว่านี่เป็นปัญหาเกี่ยวกับคุกกี้ฉันจึงลบคุกกี้ทั้งหมดจากเบราว์เซอร์และลองอีกครั้งและฉันก็ได้ผลลัพธ์เดียวกัน ในทั้งสองกรณีฉันสามารถลงชื่อเข้าใช้แผงการดูแลระบบได้โดยไม่มีปัญหาใด ๆ

ฉันได้ลองทั้งใน Firefox และ Safari แล้ว Firefox ฉันจะเห็นสิ่งเดียวกันเกิดขึ้น (แต่ไม่สม่ำเสมอและฉันสามารถแก้ไขได้โดยล้างคุกกี้) และฉันไม่สามารถทำซ้ำใน Safari

ฉันไม่เคยมีปัญหากับเรื่องนี้ใน Magento รุ่นอื่น ๆ มีการเปลี่ยนแปลงพื้นฐานบางอย่างในวิธีที่วีโอไอพีจัดการกับคุกกี้ในเวอร์ชั่น 1.9 และ / หรือมีบางสิ่งที่ฉันสามารถทำได้เพื่อทำให้เสถียรมากขึ้น?


คุณสามารถแชร์ลิงก์และทดสอบผู้ใช้ / รหัสผ่านได้
ไหม

น่าเสียดายที่มันผูกติดอยู่กับ 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:

แบ็กเอนด์ของวีโอไอพีมีฟอร์มคีย์ที่ป้องกันการโจมตี XSS [1] ด้วย Magento 1.8 คีย์ฟอร์มได้ป้อน frontend ด้วยเหตุผลเดียวกัน: เพื่อป้องกันการส่งแบบฟอร์มจากเว็บไซต์อื่นโดยใช้เบราว์เซอร์ของคุณ ผู้โจมตีที่เป็นอันตรายสามารถเพิ่มข้อมูลลงในรถเข็นของคุณในขณะที่คุณอยู่ในแท็บเบราว์เซอร์อื่นหรือทำตามคำสั่งของคุณ สิ่งนี้อาศัย URL ที่สามารถคาดเดาได้เนื่องจากเว็บไซต์จะไม่สามารถเข้าถึงเนื้อหา HTML ที่แท้จริงในแท็บเบราว์เซอร์ที่คุณรอการสั่งซื้อ Magento ทุกสิ่งที่ส่งไปยัง Magento store จะส่งคุกกี้ของคุณและใช้เซสชันของคุณ

โดยการเพิ่มคีย์เฉพาะให้กับแต่ละฟอร์มหรือแต่ละลิงก์ที่สร้างการกระทำบนเซิร์ฟเวอร์ URL หรือเนื้อหาของฟอร์มจะไม่สามารถคาดเดาได้อีกต่อไป คีย์ฟอร์มจะถูกเก็บไว้ในข้อมูลเซสชันและตรวจสอบความถูกต้องเมื่อส่งไปยังเซิร์ฟเวอร์ หากพวกเขาไม่ตรงกันคุณจะได้รับข้อผิดพลาดที่สำคัญแบบฟอร์มและการกระทำไม่เสร็จสมบูรณ์


3
เพิ่มการป้อนข้อมูล "form_key" ที่ซ่อนไว้ข้างต้นลงในแบบฟอร์มที่ตั้ง: แอพ / ออกแบบ / ส่วนหน้า / ฐาน / ค่าเริ่มต้น / แม่แบบ / ถาวร / เช็คเอาต์ / onepage / login.phtml
Flipmedia

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

โปรดลบคุกกี้ออกจากเบราว์เซอร์หรือไปที่ accountcontroller.php ตรวจสอบว่า (! $ this -> _ validateFormKey ()) {ทำงานหรือไม่
Amit Bera

รหัสแบบฟอร์มตรวจสอบความถูกต้องอย่างถูกต้อง อันที่จริงดูเหมือนว่า loginPostAction ทำงานได้อย่างสมบูรณ์แบบ
Josh Pennington

1
@AmitBera ฉันจะได้พบคุณแชทวีโอไอพี? ฉันมีปัญหาที่เกี่ยวข้องกับโมดูลสิ่งที่ปรารถนาหรือไม่
ผีเสื้อ

@AmitBera ฉันได้ตั้งค่าคีย์ แต่ก็ยังไม่ทำงาน นอกจากนี้ใน accountcontroller.php if (!$this->_validateFormKey()) {จะส่งกลับค่า false ซึ่งหมายความว่า Magento จะไม่สามารถตรวจสอบคีย์ที่ให้มาได้ คิดว่าทำไมมันเกิดขึ้น?
Arvind07

6

ในฐานะที่เป็นปัญหาน่าจะเป็นคุกกี้ที่เกี่ยวข้องลองเพิ่มเวลาชีวิตคุกกี้86400ภายใต้

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


เหตุผลอาจเป็นเพราะอายุการใช้งานคุกกี้เริ่มต้นตั้งเป็น 3600 (1 ชั่วโมง) แต่ถ้าเวลาผู้ใช้คอมพิวเตอร์ทำงานก่อนเวลาของเซิร์ฟเวอร์คุกกี้จะไม่ถูกตั้งค่าสำหรับส่วนหน้าของ Magento รวมถึงส่วนหลัง ตัวอย่างเช่นเวลาคอมพิวเตอร์ของผู้ใช้คือ 1 ชั่วโมงข้างหน้ากว่าเวลาของเซิร์ฟเวอร์นั่นหมายความว่าคุกกี้ (การถือครองรหัสเซสชันของผู้ใช้) จะหมดอายุทันทีที่ผู้ใช้ลงชื่อเข้าใช้หรือพยายามเพิ่มรายการ


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!

สาเหตุของปัญหาของฉันได้รับในชั้นเรียนได้รับการล้มเหลวในการ AUTOLOAD เพราะโมดูล (ถูก) มีแทน<codePool>community</codePool><codePool>local</codePool>


ฉันลองวิธีการแก้ปัญหาของคุณแล้ว แต่ไม่มีข้อยกเว้นถูกสร้างขึ้นแม้ว่าฉันจะไม่สามารถเข้าสู่ระบบได้!
Jon

4

ฉันแก้ไขปัญหาด้วยการเพิ่มบรรทัดด้านล่างของรหัสในไฟล์ php สำหรับเข้าสู่ระบบแบบถาวร

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

1
ขอบคุณสำหรับการแก้ปัญหา ฉันเสียเวลาไปเกือบครึ่งวันแล้ว และในที่สุดก็พบทางออกนี้
Gaurav Agrawal

3

ตกลงหลังจากดิ้นรนเป็นเวลาครึ่งชั่วโมงฉันพบว่าโฟลเดอร์ 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

หากคุณใช้แคชวานิชอาจมีปัญหาอื่น ฉันกำลังหาทางออกฉันพบที่อื่น https://github.com/nexcess/magento-turpentine/issues/169

และที่นี่เราไป ... ครั้งสุดท้ายที่มันเกิดขึ้นกับฉันปัญหานี้ด้วยการเข้าสู่ระบบฉันสังเกตเห็นว่าฉัน "ได้" สองคุกกี้ที่แตกต่างกันด้วยชื่อเดียวกัน "frontend" ทั้งหมด fileds ของคุกกี้เหล่านี้เหมือนกันยกเว้นจาก ฟิลด์ "โดเมน" ในคุกกี้ตัวแรกค่าโดเมนคือ "mydomain.com" ส่วนที่สองคือ "www.mydomain.com" สิ่งนี้เกิดขึ้นเมื่อผู้ใช้ไม่มีคุกกี้ส่วนหน้าและประเภท "mydomain.com" ใน URL ของเบราว์เซอร์ สิ่งนี้ทริกเกอร์คุกกี้ "ส่วนหน้า" ที่ผิดพลาดเพื่อตั้งค่าและทำให้เกิดความยุ่งเหยิง! ย้อนกลับไปในเซิร์ฟเวอร์ของเราเรามีกฎว่าหากผู้ใช้เว็บนิยม "mydomain.com" เพื่อให้บริการเขา "www.mydomain.com" ซึ่งหมายความว่าในเบราว์เซอร์ของผู้ใช้ในแถบที่อยู่ url จะถูกเปลี่ยนจาก "mydomain.com" ถึง "www.mydomain.com" ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับปัญหาการเข้าสู่ระบบ ฉันแค่พูดถึงมัน วิธีแก้ปัญหา: ที่การตั้งค่าวีโอไอพีที่ตัวเลือกแคชแคชแบบ Turpentine มีตัวเลือก "Normalize host" คุณต้องเปิดใช้งาน ขอบคุณหลังจากนี้ไม่มีสิ่งยุ่งไม่มีคุกกี้ส่วนหน้าสองครั้ง! หวังว่านี่จะช่วยได้!


2

เหตุผลสำหรับปัญหานี้คือฟอร์มการลงชื่อเข้าใช้ที่กำหนดเองไม่มี form_key ใด ๆ และมีการตรวจสอบความถูกต้องของแบบฟอร์มที่เกิดขึ้นใน loginPostAction of Magento

คุณสามารถแก้ไขได้ดังนี้:

  1. ไปที่แอพ / ออกแบบ / ส่วนหน้า / [แพ็คเกจของคุณ] / [ธีมของคุณ] /template/customer/form/login.phtml

หา:

และวางสิ่งนี้ไว้ทางด้านขวาของโค้ดด้านบน:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. ไปที่แอพ / ออกแบบ / ส่วนหน้า / แพ็คเกจของคุณ] / [ธีมของคุณ] / เทมเพลต / ส่วนต่อท้าย / ลูกค้า / ฟอร์ม /login.phtml และใช้การเปลี่ยนแปลงเดียวกัน

1

ข้างต้นใช้งานได้ดีสำหรับฉัน แต่ฉันอัพเกรดจาก Magento 1.4.1 เป็น 1.9.1 ดังนั้นการก้าวกระโดดครั้งใหญ่ ไม่พบไฟล์ในตำแหน่งด้านบน แต่อยู่ในโฟลเดอร์แอพ / ออกแบบ / ส่วนหน้า / ฐาน

/ app / ออกแบบ / ส่วนหน้า / BASE / default / แม่แบบ / ลูกค้า / ถาวร / รูปแบบ /

โฟลเดอร์ฐานนี้เก็บไฟล์ทั่วไปจำนวนมากตั้งแต่ 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

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยการลบคุกกี้ทั้งหมด ปัญหาดูเหมือนจะเกิดขึ้นหากคุณมีร้านค้าวีโอไอพีที่แตกต่างกันและเข้าสู่พวกเขาในเวลาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.