Magento 2: การเข้าสู่ระบบของผู้ใช้บางครั้งจำเป็นต้องเข้าสู่ระบบสองครั้งในการตั้งค่าหลายร้าน


9

ฉันกำลังพยายามติดตั้งหลายร้านด้วยรถเข็นที่ใช้ร่วมกัน อย่างไรก็ตามการเข้าสู่ระบบของผู้ใช้บางครั้งไม่ทำงาน

ใช้Store Switcherงานได้ดี แต่ส่วนUser Loginที่ 2 และ 3 Storeต้องการให้ฉันคลิกSign Inปุ่มสองครั้งเพื่อเข้าสู่ระบบ

ฉันมีการตั้งค่าหลายร้านค้าด้วยการตั้งค่าเหล่านี้:

หลายโดเมน (โฮสต์เสมือน)

ฉันกำลังใช้งานWebsiteอยู่ Storesเว็บไซต์จะมีสาม ชื่อโดเมนจะแบ่งปันหนึ่งโดเมนพื้นฐานทั่วไป ร้านค้าเพิ่มเติมจะใช้โดเมนย่อย

ฉันสร้างmagento2.comเป็นโดเมนพื้นฐานเริ่มต้น

ฉันสร้างstore2.magento2.comเป็นร้านที่ 2

ฉันสร้างstore3.magento2.comเป็นร้านที่ 3

ป้อนคำอธิบายรูปภาพที่นี่


หมวดหมู่รูทและผลิตภัณฑ์ทดสอบ

ฉันสร้างstore2 รากหมวดหมู่และStore3 รากหมวดหมู่ ฉันสร้างหมวดหมู่ย่อยภายใต้หมวดหมู่รูทแต่ละหมวด

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเพิ่มหนึ่งผลิตภัณฑ์ทดสอบในแต่ละหมวดหมู่ย่อย

ป้อนคำอธิบายรูปภาพที่นี่


ร้านค้าและมุมมอง

ผมไม่ได้เปลี่ยนแปลงอะไรในหลักร้านเว็บไซต์และเริ่มต้นร้านดู

ฉันสร้างStore2และStore View 2สำหรับร้านที่ 2

ฉันสร้างStore3และStore View 3สำหรับร้านค้าที่ 3

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับstore2ผมตั้งstore2เป็นNameและเลือกstore2 รากหมวดหมู่Root Categoryเป็น

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับร้านค้า 2ผมเลือกstore2เป็นStoreที่ใช้ในร้าน 2เป็นNameและเข้าstore2Store Codeเป็น

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับ 3 Storeผมตั้งStore3เป็นNameและเลือกStore3 รากหมวดหมู่Root Categoryเป็น

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับร้านค้า 3ผมเลือกStore3เป็นStoreที่ใช้ในร้าน 3เป็นNameและเข้าstore3Store Codeเป็น

ป้อนคำอธิบายรูปภาพที่นี่


การตั้งค่า URL และคุกกี้

Configurationหน้าจอในขณะนี้แสดงให้เห็นว่าทางเลือกที่ 5 ภายใต้Store Viewหล่นลง:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. มุมมองร้านค้า 2
  5. มุมมองร้านค้า 3

ป้อนคำอธิบายรูปภาพที่นี่

ผมเปลี่ยนการตั้งค่า URL และคุกกี้สำหรับ Default Store View, ร้าน 2และร้านค้า 3

ผมไม่ได้เปลี่ยนการตั้งค่า URL หรือคุกกี้สำหรับและDefault ConfigMain Website


สำหรับผมเปลี่ยนDefault Store ViewCookie Path

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับร้านค้า 2ผมเปลี่ยนและBase URLCookie Path

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


สำหรับร้านค้า 3ผมเปลี่ยนและBase URLCookie Path

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


การแชร์บัญชี

กับบัญชีผู้ใช้ร่วมกันและรถเข็นหมู่ร้านค้าหลายผมเปลี่ยนShare Customer Accountsจาก "ต่อเว็บไซต์" เพื่อโลกDefault Configภายใต้

ป้อนคำอธิบายรูปภาพที่นี่


.htaccess เปลี่ยนแปลง

ฉันเพิ่มบรรทัดเหล่านี้ที่ด้านบนของ.htaccessไฟล์ที่ไดเรกทอรีรากของโครงการ

#Multi store setting
SetEnvIf Host magento2.com MAGE_RUN_CODE=default
SetEnvIf Host magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^magento2.com MAGE_RUN_CODE=default
SetEnvIf Host ^magento2.com MAGE_RUN_TYPE=store

SetEnvIf Host store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host store2.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host ^store2.magento2.com MAGE_RUN_TYPE=store

SetEnvIf Host store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host store3.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host ^store3.magento2.com MAGE_RUN_TYPE=store


index.php เปลี่ยนแปลง

การใช้Store Switcher, บางครั้งจำเป็นต้องคลิกสองครั้งเพื่อเปลี่ยนจาก store2 / 3 เป็นค่าเริ่มต้น ในการแก้ไขปัญหานี้ฉันต้องรีเซ็ตค่าสำหรับ$_COOKIE['store']ที่ index.php:

<?php
/**
 * Application entry point
 *
 * Example - run a particular store or website:
 * --------------------------------------------
 * require __DIR__ . '/app/bootstrap.php';
 * $params = $_SERVER;
 * $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website2';
 * $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
 * $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
 * \/** @var \Magento\Framework\App\Http $app *\/
 * $app = $bootstrap->createApplication('Magento\Framework\App\Http');
 * $bootstrap->run($app);
 * --------------------------------------------
 *
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

try {
    require __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

// Fix store switcher bug on switching to the default store
if ( isset($_SERVER['MAGE_RUN_TYPE']) == 'store' && isset($_SERVER['MAGE_RUN_CODE']) ) {
    if ( !empty($_SERVER['MAGE_RUN_CODE']) ) {
        $_COOKIE['store'] = $_SERVER['MAGE_RUN_CODE'];
    }
}

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);


บางครั้งการเข้าสู่ระบบของผู้ใช้จำเป็นต้องคลิกสองครั้ง

ด้วยการตั้งค่าข้างต้นStore Switcherจะทำงานได้ดี การช็อปปิ้งCartมีการแชร์ใน 3 ร้านค้าทั้งหมดสำหรับผู้ใช้ที่ลงชื่อเข้าใช้และไม่ได้ลงชื่อเข้าใช้

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามในStore2และStore3user loginบางครั้งส่วนหน้าเปลี่ยนเส้นทางกลับไปที่หน้าเข้าสู่ระบบเดียวกัน หากฉันกดSign Inปุ่มบนหน้าเข้าสู่ระบบที่เปลี่ยนเส้นทาง (ครั้งที่สองเพื่อคลิกปุ่มนี้) ฉันจะเข้าสู่ระบบ

มีวิธีแก้ไขปัญหานี้หรือไม่?


อัปเดต: ปิดการใช้งาน Cache

ฉันปิดการใช้งานแคชจากบรรทัดคำสั่ง:

php bin/magento cache:disable

ด้วยแคชปิดใช้งานuser loginบนstore2และStore3กลายเป็นมีเสถียรภาพมากขึ้น มันยังคงเปลี่ยนเส้นทางกลับไปที่หน้าเข้าสู่ระบบ 1 จาก 10 ครั้ง แต่การเปลี่ยนแปลงนี้ทำให้การเข้าสู่ระบบทำงานได้ดีขึ้น

อย่างไรก็ตามเว็บไซต์ทั้งหมดช้า !!!

มีวิธีการกำหนดค่าแคชอย่างถูกต้องเพื่อให้การuser loginดำเนินการอย่างถูกต้องในการStoreตั้งค่าหลายหรือไม่?


สวัสดีคุณสามารถแก้ไขปัญหาได้หรือไม่? ฉันยังประสบปัญหาเดียวกันในเว็บไซต์ของฉัน รายละเอียดการเข้าสู่ระบบไม่ถูกแชร์ระหว่างร้านค้าภายใต้เว็บไซต์เดียว คุณช่วยแบ่งปันโซลูชันของคุณได้
ไหม

คำตอบ:


0

เราจัดการเพื่อให้ตัวสลับร้านค้าและเข้าสู่ระบบเสถียรขึ้นเล็กน้อยด้วยการกำหนดค่าใหม่

เพิ่มรหัสร้านค้าใน URL

การเปลี่ยนแปลงที่ยิ่งใหญ่ที่สุดคือการตั้งค่าAdd Store Code to Urlsเป็น "ใช่"

ร้านค้า => การ
กำหนดค่าในส่วนการตั้งค่า =>
เลือกDefault Config=>
เว็บในส่วนทั่วไป =>
ตัวเลือก URL =>
  เปลี่ยนเป็นAdd Store Code to Urls"ใช่"

ป้อนคำอธิบายรูปภาพที่นี่

 

ลบโดเมนคุกกี้

จากนั้นเราลบCookie Domainค่าจากStore2และStore3จากหน้าการกำหนดค่า

ร้านค้า => การ
กำหนดค่าในส่วนการตั้งค่า =>
เลือกStore2หรือStore3 =>
เว็บในส่วนทั่วไป =>
การตั้งค่าคุกกี้เริ่มต้น =>
  ลบค่าจากCookie Domainและปล่อยว่างไว้

ป้อนคำอธิบายรูปภาพที่นี่

 

ลบรหัสที่กำหนดเองออกจาก.htaccessและindex.php

จากนั้นเราได้นำสายรหัสที่กำหนดเองในรูปแบบและ.htaccessindex.php

ด้วยการกำหนดค่าใหม่การปรับแต่งไฟล์เหล่านี้ไม่จำเป็นอีกต่อไป นี่เป็นโค้ดที่ยอดเยี่ยมและสะอาดตา

 

หลังจากการเปลี่ยนแปลงเหล่านี้ตัวสลับร้านค้าตะกร้าสินค้าที่ใช้ร่วมกันและการเข้าสู่ระบบของผู้ใช้จะมีเสถียรภาพมากขึ้น ตรวจสอบให้แน่ใจว่าคุณล้างแคชหลังจากทำการเปลี่ยนแปลงเหล่านี้

 

การอัพเกรดแกนหลักของ Magento2 และผลกระทบต่อ.htaccessและindex.php

ก่อนที่จะทำการตั้งค่าและไฟล์การเปลี่ยนแปลงเราปรับแกน Magento2 จาก 2.1.0 ไป 2.1.3 composerใช้ (ข้อมูลอ้างอิง: อัปเดต Magento 2.1.2 สำหรับ 2.1.3 )

เราไม่แน่ใจว่านี่จะเป็นส่วนที่จำเป็นสำหรับการกำหนดค่าหลายสโตร์ แต่เราดำเนินการโดยหวังว่าไซต์จะมีเสถียรภาพมากขึ้นด้วยการอัปเดตล่าสุดจาก 2.1.3

เรามีการแก้ไข 3 ไฟล์ซึ่งเป็นส่วนหนึ่งของไฟล์ core และ module (ไฟล์เหล่านี้ถูกละเว้นโดยการควบคุมเวอร์ชัน Git ของเรา):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (ไฟล์ Grunt config เพื่อรวบรวม CSS ธีมที่กำหนดเองของเรา)

เมื่อเราอัพเกรด Magento2 ไฟล์เหล่านี้จะถูกรีเซ็ตเป็นสถานะเริ่มต้นที่ 2.1.3 เราไม่จำเป็นต้องทำความสะอาด.htaccessและindex.phpไฟล์ของเราด้วยตนเอง เนื้อหาของไฟล์ถูกรีเซ็ตโดยอัตโนมัติโดยการอัพเกรด นี่เป็นผลข้างเคียงที่เป็นบวก

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

ฉันแนะนำให้ทำการสำรองไฟล์และฐานข้อมูลก่อนที่จะทำการอัปเกรดคอร์และการเปลี่ยนแปลงไฟล์ /


การลดขนาด Javascript อาจช่วยได้

การลดขนาด JS ทำให้ทั้งไซต์มีความเสถียรมากขึ้นในเว็บไซต์ของเรา

ร้านค้า => การ
กำหนดค่าในส่วนการตั้งค่า =>
เลือกDefault Config=> ผู้
พัฒนาในส่วนขั้นสูง =>
การตั้งค่า JavaScript =>
  ตั้งค่าMerge JavaScript Filesเป็น "ใช่" =>
  ตั้งค่าEnable JavaScript Bundlingเป็น "ใช่" =>
  ตั้งค่าMinify JavaScript Filesเป็น "ใช่" =>
จากนั้นล้างแคช

ป้อนคำอธิบายรูปภาพที่นี่

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