Magento 2: Logowanie użytkownika czasami wymaga dwukrotnego zalogowania w konfiguracji wielu sklepów

9

Próbuję skonfigurować sklep wielobranżowy ze wspólnym koszykiem. Jednak logowanie użytkownika czasami nie działa.

Store SwitcherDziała dobrze, ale nakładka User Loginna 2 i 3 Storewymaga ode mnie kliknij Sign Inprzycisk dwa razy się zalogować.

Mam skonfigurowane wiele sklepów z tymi konfiguracjami:

Multi Domain (Virtual Hosts)

Używam jednego Website. Witryna będzie miała trzy Stores. Nazwy domen będą miały wspólną wspólną domenę podstawową. Dodatkowe sklepy będą używać subdomen .

Stworzyłem magento2.com jako domyślną domenę podstawową.

Stworzyłem store2.magento2.com jako drugi sklep.

Stworzyłem store3.magento2.com jako trzeci sklep.

wprowadź opis zdjęcia tutaj


Kategorie główne i produkty testowe

Utworzyłem kategorię główną Store2 i kategorię główną Store3 . Utworzyłem również podkategorie w ramach każdej kategorii głównej.

wprowadź opis zdjęcia tutaj

Dodałem jeden produkt testowy do każdej podkategorii.

wprowadź opis zdjęcia tutaj


Sklepy i widoki

NIE zmieniłem niczego w głównym sklepie internetowym i domyślnym widoku sklepu .

Utworzyłem Store2 i Store View 2 dla drugiego sklepu.

Stworzyłem Store3 i Store View 3 dla trzeciego sklepu.

wprowadź opis zdjęcia tutaj


W przypadku Store2 ustawiłem Store2 jako Namei wybrałem kategorię katalogu głównego Store2 jako Root Category.

wprowadź opis zdjęcia tutaj


Dla Store View 2 wybrałem Store2 as Store, użyłem Store View 2 as Namei wprowadziłem store2 as Store Code.

wprowadź opis zdjęcia tutaj


Dla 3. Storeustawiłem Store3 jako Namei wybrałem kategorię katalogu głównego Store3 jako Root Category.

wprowadź opis zdjęcia tutaj


Dla Store View 3 wybrałem Store3 as Store, użyłem Store View 3 as Namei wprowadziłem store3 as Store Code.

wprowadź opis zdjęcia tutaj


Ustawienie adresu URL i plików cookie

ConfigurationTeraz ekran pokazuje 5 wyborów pod Store Viewrozwijaną:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. Widok sklepu 2
  5. Widok sklepu 3

wprowadź opis zdjęcia tutaj

Zmieniłem adres URL i ustawienia plików cookie dla Default Store View, Widok sklepu 2 i Widok sklepu 3 .

NIE zmieniłem ustawień adresu URL ani plików cookie dla Default Configi Main Website.


Bo się Default Store Viewzmieniłem Cookie Path.

wprowadź opis zdjęcia tutaj


W przypadku widoku sklepu 2 zmieniłem Base URLi Cookie Path.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


W widoku sklepu 3 zmieniłem Base URLi Cookie Path.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


Udostępnianie konta

Aby udostępnić konta użytkowników i koszyk zakupów w wielu sklepach, zmieniłem Share Customer Accountsopcję „Na stronę internetową” na Globalną pod Default Config.

wprowadź opis zdjęcia tutaj


.htac zmiana

Dodałem te linie na górze .htaccesspliku w katalogu głównym projektu.

#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


zmiana index.php

Za pomocą Store Switcher, czasami wymagane dwukrotne kliknięcie, aby przełączyć z store2 / 3 do domyślnego. Aby to naprawić, musiałem zresetować wartość dla $_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);


Logowanie użytkownika czasami wymaga dwukrotnego kliknięcia

Przy powyższej konfiguracji Store Switcherdziała dobrze. Zakupy Cartsą wspólne dla wszystkich 3 sklepów zarówno dla zalogowanych, jak i niezalogowanych użytkowników.

wprowadź opis zdjęcia tutaj

Jednak w Store2 i Store3 frontend user loginczasami przekierowuje z powrotem na tę samą stronę logowania. Jeśli naciśniesz Sign Inprzycisk na przekierowanej stronie logowania (drugi raz, aby kliknąć ten przycisk), pozwolę się zalogować.

Czy istnieje sposób na rozwiązanie tego problemu?


Aktualizacja: wyłączanie Cache

Wyłączyłem buforowanie z wiersza poleceń:

php bin/magento cache:disable

Z wyłączoną pamięcią podręczną, user loginna Store2 i Store3 stały się znacznie bardziej stabilne. Nadal przekierowano z powrotem na stronę logowania 1 na 10 prób, ale ta zmiana sprawiła, że ​​logowanie działało lepiej.

Jednak cała strona zwolniła !!!

Czy istnieje sposób, aby poprawnie skonfigurować pamięć podręczną, aby user loginpoprawnie działała na wielu Storekonfiguracjach?

Noemi Quezada
źródło
Cześć Czy udało Ci się rozwiązać problem? Mam również ten sam problem na mojej stronie. Dane logowania nie są udostępniane między sklepami w ramach jednej witryny. Czy możesz podzielić się swoim rozwiązaniem
Zammuuz,

Odpowiedzi:

0

Udało nam się zmienić przełącznik sklepu i zalogować się nieco bardziej stabilnie dzięki nowej konfiguracji.

Dodaj kod sklepu do adresów URL

Największą zmianą było ustawienie Add Store Code to Urls„Tak”.

Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz Default Config=>
Sieć w sekcji OGÓLNE =>
Opcje adresu URL =>
  zmień opcję Add Store Code to Urlsna „Tak”

wprowadź opis zdjęcia tutaj

 

Usuń domenę plików cookie

Następnie usunęliśmy Cookie Domainwartość ze Store2 i Store3 ze strony konfiguracji.

Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz Store2 lub Store3 =>
Sieć w sekcji OGÓLNE =>
Domyślne ustawienia plików cookie =>
  usuń wartość Cookie Domaini pozostaw ją pustą

wprowadź opis zdjęcia tutaj

 

Usuń niestandardowe kody z .htaccessiindex.php

Następnie usunęliśmy niestandardowe wiersze kodu .htaccessi index.php.

Dzięki nowej konfiguracji dostosowanie tych plików nie było już potrzebne. To świetny, czystszy kod.

 

Po tych zmianach przełącznik sklepu, wspólny koszyk i logowanie użytkownika stały się znacznie bardziej stabilne. Po wprowadzeniu tych zmian wyczyść pamięć podręczną.

 

Ulepszenie rdzenia Magento2 i jego wpływ na .htaccessiindex.php

Przed wprowadzeniem zmian w konfiguracji i plikach zaktualizowaliśmy rdzeń Magento2 z 2.1.0 do 2.1.3 za pomocą composer. (Odniesienie: Aktualizacja Magento 2.1.2 dla 2.1.3 )

Nie jesteśmy pewni, czy będzie to wymagana część tej konfiguracji wielu sklepów, ale przeprowadziliśmy ją, mając nadzieję, że witryna będzie bardziej stabilna dzięki najnowszym aktualizacjom z wersji 2.1.3

Zmodyfikowaliśmy 3 pliki, które były częścią plików rdzenia i modułów (pliki te są ignorowane przez naszą kontrolę wersji Git):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (plik konfiguracyjny Grunt do skompilowania naszego niestandardowego css motywu)

Kiedy zaktualizowaliśmy Magento2, pliki te są resetowane do stanu początkowego 2.1.3. NIE musieliśmy ręcznie czyścić naszych plików .htaccessi index.phpplików. Zawartość pliku została automatycznie zresetowana przez aktualizację. To był pozytywny efekt uboczny.

Ale był też zły efekt uboczny. Nasz niestandardowy kod w pliku konfiguracyjnym Grunt został zresetowany i usunięty przez aktualizację podstawową. Musieliśmy ręcznie przywrócić niestandardowe linie kodu w tym pliku.

Zalecam wykonanie kopii zapasowych plików i DB przed wykonaniem tej podstawowej aktualizacji i zmian w konfiguracji / pliku.


Pomaganie w minimalizacji Javascript może pomóc

Zmniejszenie JS sprawiło, że cała witryna jest bardziej stabilna na naszej stronie.

Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz Default Config=>
Deweloper w sekcji ZAAWANSOWANE =>
Ustawienia JavaScript =>
  ustaw Merge JavaScript Filesna „Tak” =>
  ustaw Enable JavaScript Bundlingna „Tak” =>
  ustaw Minify JavaScript Filesna „Tak” =>
następnie wyczyść pamięć podręczną

wprowadź opis zdjęcia tutaj

Yas Nakano
źródło