Magento 2: Die Benutzeranmeldung erfordert manchmal eine zweimalige Anmeldung bei der Einrichtung mehrerer Geschäfte

9

Ich versuche, einen Multi-Store mit gemeinsam genutztem Warenkorb einzurichten. Die Benutzeranmeldung funktioniert jedoch manchmal nicht.

Das Store Switcherfunktioniert gut, aber für das Frontend User Loginam 2. und 3. Storemuss ich Sign Inzweimal auf die Schaltfläche klicken, um mich anzumelden.

Ich habe mehrere Stores mit diesen Setups eingerichtet:

Multi Domain (virtuelle Hosts)

Ich benutze einen Website. Die Seite wird drei haben Stores. Die Domänennamen teilen sich eine gemeinsame Basisdomäne. Die zusätzlichen Speicher verwenden Subdomains .

Ich habe magento2.com als Standard- Basisdomäne erstellt .

Ich habe store2.magento2.com als 2. Store erstellt.

Ich habe store3.magento2.com als 3. Store erstellt.

Geben Sie hier die Bildbeschreibung ein


Stammkategorien und Testprodukte

Ich habe Store2 Root Category und Store3 Root Category erstellt . Ich habe auch Unterkategorien unter jeder Stammkategorie erstellt.

Geben Sie hier die Bildbeschreibung ein

Ich habe jeder Unterkategorie ein Testprodukt hinzugefügt.

Geben Sie hier die Bildbeschreibung ein


Geschäfte und Ansichten

Ich habe im Main Website Store und in der Default Store View nichts geändert .

Ich habe Store2 und Store View 2 für den 2. Store erstellt.

Ich habe Store3 und Store View 3 für den 3. Store erstellt.

Geben Sie hier die Bildbeschreibung ein


Für Store2 , habe ich Store2 wie Nameund ausgewählten Store2 Root - Kategorie wie Root Category.

Geben Sie hier die Bildbeschreibung ein


Für Store View 2 habe ich Store2 als ausgewählt Store, Store View 2 als verwendet Nameund store2 als eingegebenStore Code .

Geben Sie hier die Bildbeschreibung ein


Für 3. Store, habe ich Store3 wie Nameund ausgewählten Store3 Root - Kategorie wie Root Category.

Geben Sie hier die Bildbeschreibung ein


Für Store View 3 habe ich Store3 als ausgewählt Store, Store View 3 als verwendet Nameund store3 als eingegebenStore Code .

Geben Sie hier die Bildbeschreibung ein


URL- und Cookie-Einstellung

Der ConfigurationBildschirm zeigt jetzt 5 Auswahlmöglichkeiten in der Store ViewDropdown-Liste:

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

Geben Sie hier die Bildbeschreibung ein

Ich änderte URL und Cookie - Einstellungen für Default Store View, Store View 2 und Store View 3 .

Ich habe die URL- oder Cookie-Einstellungen für Default Configund NICHT geändert Main Website.


Denn Default Store Viewich habe mich verändert Cookie Path.

Geben Sie hier die Bildbeschreibung ein


Für Store View 2 habe ich Base URLund geändert Cookie Path.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Für Store View 3 habe ich Base URLund geändert Cookie Path.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Konto teilen

Um Aktie Benutzerkonten und Warenkorb unter mehreren Geschäften, ich geändert Share Customer Accountsvon „Per Website“ zu Globale unter Default Config.

Geben Sie hier die Bildbeschreibung ein


.htaccess Änderung

Ich habe diese Zeilen oben in der .htaccessDatei im Projektstammverzeichnis hinzugefügt .

#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 ändern

Verwenden Sie die Store SwitcherTaste, um manchmal zweimal zu klicken, um von store2 / 3 zum Standard zu wechseln. Um dies zu beheben, musste ich den Wert für $_COOKIE['store']in der index.php zurücksetzen :

<?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);


Für die Benutzeranmeldung muss manchmal zweimal geklickt werden

Mit dem obigen Setup Store Switcherfunktioniert das einwandfrei. Der Einkauf Cartwird von allen 3 Stores sowohl für angemeldete als auch für nicht angemeldete Benutzer geteilt.

Geben Sie hier die Bildbeschreibung ein

In Store2 und Store3user login leitet das Frontend jedoch manchmal zur gleichen Anmeldeseite zurück. Wenn ich die Sign InSchaltfläche auf der umgeleiteten Anmeldeseite drücke (2. Mal, um auf diese Schaltfläche zu klicken), kann ich mich anmelden.

Gibt es eine Möglichkeit, dieses Problem zu beheben?


Update: Deaktivieren Cache

Ich habe das Caching über die Befehlszeile deaktiviert:

php bin/magento cache:disable

Mit deaktiviertem Cache wurden die user loginauf Store2 und Store3 viel stabiler. Von 10 Versuchen wurde immer noch auf die Anmeldeseite 1 umgeleitet, aber durch diese Änderung funktionierte die Anmeldung besser.

Die gesamte Seite wurde jedoch langsam !!!

Gibt es eine Möglichkeit, den Cache richtig zu konfigurieren, damit user loginer bei einem Multi- StoreSetup korrekt funktioniert ?

Noemi Quezada
quelle
Hallo Konnten Sie das Problem beheben? Ich habe auch das gleiche Problem auf meiner Website. Anmeldedaten werden nicht zwischen Geschäften unter einer einzigen Website geteilt. Können Sie bitte Ihre Lösung teilen
Zammuuz

Antworten:

0

Wir haben es geschafft, den Store Switcher und die Anmeldung mit der neuen Konfiguration etwas stabiler zu machen.

Fügen Sie Speichercode zu URLs hinzu

Die größte Änderung war die Einstellung Add Store Code to Urls"Ja".

Speicher =>
Konfiguration im Bereich Einstellungen =>
Auswahl Default Config=>
Web im Abschnitt
ALLGEMEIN = = URL-Optionen =>
  Ändern Sie den Wert Add Store Code to Urlsin "Ja".

Geben Sie hier die Bildbeschreibung ein

 

Cookie-Domain entfernen

Dann haben wir den Cookie DomainWert von Store2 und Store3 von der Konfigurationsseite entfernt.

Stores =>
Konfiguration im Bereich Einstellungen => Wählen
Sie Store2 oder Store3 =>
Web im Abschnitt ALLGEMEIN = =
Standard-Cookie-Einstellungen =>
  Entfernen Sie den Wert aus Cookie Domainund lassen Sie ihn leer

Geben Sie hier die Bildbeschreibung ein

 

Entfernen Sie benutzerdefinierte Codes von .htaccessundindex.php

Dann haben wir benutzerdefinierte Codezeilen aus .htaccessund entfernt index.php.

Mit der neuen Konfiguration war die Anpassung dieser Dateien nicht mehr erforderlich. Das ist großartiger, sauberer Code.

 

Nach diesen Änderungen wurden der Store Switcher, der freigegebene Warenkorb und die Benutzeranmeldung wesentlich stabiler. Stellen Sie sicher, dass Sie den Cache leeren, nachdem Sie diese Änderungen vorgenommen haben.

 

Magento2 Core Upgrade und seine Auswirkungen auf .htaccessundindex.php

Bevor wir Konfigurations- und Dateiänderungen vornehmen, haben wir den Magento2-Kern mit 2.1.0 auf 2.1.3 aktualisiert composer. (Referenz: Aktualisieren Sie Magento 2.1.2 für 2.1.3 )

Wir sind nicht sicher, ob dies ein erforderlicher Teil für diese Multi-Store-Konfiguration sein wird, aber wir haben es durchgeführt, in der Hoffnung, dass die Site mit den neuesten Updates von 2.1.3 stabiler wird

Wir haben 3 Dateien geändert, die Teil der Kern- und Moduldateien waren (diese Dateien werden von unserer Git-Versionskontrolle ignoriert):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / theme.js (Grunt-Konfigurationsdatei zum Kompilieren unseres benutzerdefinierten Theme-CSS)

Beim Upgrade von Magento2 werden diese Dateien auf den Ausgangszustand 2.1.3 zurückgesetzt. Wir mussten unsere .htaccessund index.phpDateien NICHT manuell bereinigen . Der Dateiinhalt wurde durch das Upgrade automatisch zurückgesetzt. Dies war eine positive Nebenwirkung.

Es gab aber auch eine schlimme Nebenwirkung. Unser benutzerdefinierter Code in der Grunt-Konfigurationsdatei wurde durch das Kern-Upgrade zurückgesetzt und gelöscht. Wir mussten unsere benutzerdefinierten Codezeilen in dieser Datei manuell wiederherstellen.

Ich empfehle, Datei- und DB-Sicherungen durchzuführen, bevor Sie dieses Kern-Upgrade und Konfigurations- / Dateiänderungen durchführen.


Das Minimieren von Javascript könnte helfen

Durch das Minimieren von JS wurde die gesamte Site auf unserer Site stabiler.

Shops =>
Konfiguration im Abschnitt Einstellung =>
wählen Default Config=>
Entwickler in ADVANCED section =>
JavaScript Einstellungen =>
  Satz Merge JavaScript Filesauf "Ja" =>
  Satz Enable JavaScript Bundlingauf "Ja" =>
  Satz Minify JavaScript Filesauf "Ja" =>
dann, klar Cache

Geben Sie hier die Bildbeschreibung ein

Yas Nakano
quelle