Magento 2: для входа в систему иногда требуется дважды войти в систему настройки нескольких магазинов

9

Я пытаюсь настроить мульти магазин с общей корзиной. Однако логин пользователя иногда не работает.

Store SwitcherРаботает отлично, но внешний интерфейс User Loginна втором и 3 Storeтребует от меня , чтобы нажать на Sign Inкнопку дважды для входа.

Я настроил несколько магазинов с этими настройками:

Multi Domain (виртуальные хосты)

Я использую один Website. На сайте будет три Stores. Доменные имена будут иметь один общий базовый домен. Дополнительные магазины будут использовать субдомены .

Я создал magento2.com в качестве базового домена по умолчанию.

Я создал store2.magento2.com как второй магазин.

Я создал store3.magento2.com как третий магазин.

введите описание изображения здесь


Корневые категории и тестовые продукты

Я создал корневую категорию Store2 и корневую категорию Store3 . Я также создал подкатегории в каждой корневой категории.

введите описание изображения здесь

Я добавил один тестовый продукт в каждую подкатегорию.

введите описание изображения здесь


Магазины и Виды

Я ничего не изменил на главном сайте магазине и по умолчанию магазина View .

Я создал Store2 и Store View 2 для второго магазина.

Я создал Store3 и Store View 3 для третьего магазина.

введите описание изображения здесь


Для Store2 я установил Store2 как Nameи выбрал Store2 Root Category как Root Category.

введите описание изображения здесь


Для Store View 2 я выбрал Store2 как Store, использовал Store View 2 как Nameи ввел store2 как Store Code.

введите описание изображения здесь


Для третьего Storeя установил Store3 как Nameи выбрал Store3 Root Category как Root Category.

введите описание изображения здесь


Для Store View 3 я выбрал Store3 как Store, использовал Store View 3 как Nameи ввел store3 as Store Code.

введите описание изображения здесь


Настройка URL и cookie

ConfigurationЭкран теперь показывает 5 вариантов под Store Viewраскрывающимся:

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

введите описание изображения здесь

Я изменил настройки URL и Cookie для Default Store View, Store View 2 и Store View 3 .

Я НЕ изменил настройки URL или cookie для Default Configи Main Website.


Для Default Store View, я изменился Cookie Path.

введите описание изображения здесь


Для Store View 2 я изменил Base URLи Cookie Path.

введите описание изображения здесь

введите описание изображения здесь


Для Store View 3 я изменил Base URLи Cookie Path.

введите описание изображения здесь

введите описание изображения здесь


Совместное использование аккаунта

Для учетных записей пользователей акций и покупок корзины среди множества магазинов, я изменился Share Customer Accountsот «Per Сайта» в Global под 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 и Store3 интерфейс user loginиногда перенаправляет обратно на одну и ту же страницу входа. Если я Sign Inнажимаю кнопку на перенаправленной странице входа в систему (второй раз, чтобы нажать эту кнопку), она позволяет мне войти.

Есть ли способ решить эту проблему?


Обновление: отключение Cache

Я отключил кеширование из командной строки:

php bin/magento cache:disable

С кэшем отключен, user loginна store2 и Store3 стал гораздо более стабильным. Он все еще перенаправлялся обратно на страницу входа 1 из 10 попыток, но это изменение сделало вход в систему работать лучше.

Однако весь сайт стал медленным !!!

Есть ли способ правильно настроить кэш, чтобы заставить user loginработать правильно на множественной Storeустановке?

Ноэми Кесада
источник
Привет, вы смогли решить проблему ?? Я также сталкиваюсь с той же проблемой на моем сайте. Данные для входа не распределяются между магазинами под одним веб-сайтом. Можете ли вы поделиться своим решением
Zammuuz

Ответы:

0

Нам удалось сделать коммутатор магазина и войти немного более стабильным с новой конфигурацией.

Добавить код магазина в URL

Самым большим изменением была установка Add Store Code to Urlsна «Да».

Магазины =>
Конфигурация в разделе Настройки =>
выберите Default Config=>
Веб в разделе ОБЩИЕ = =
Параметры URL =>
  измените на Add Store Code to Urls«Да»

введите описание изображения здесь

 

Удалить домен cookie

Затем мы удалили Cookie Domainзначение из Store2 и Store3 со страницы конфигурации.

Магазины =>
Конфигурация в разделе «Настройки» =>
выберите « Store2» или « Store3» => «
Интернет» в разделе «ОБЩИЕ» =>
Настройки cookie по умолчанию =>
  удалите значение Cookie Domainи оставьте его пустым

введите описание изображения здесь

 

Удалить пользовательские коды из .htaccessиindex.php

Затем мы удалили пользовательские строки кода формы .htaccessи index.php.

С новой конфигурацией настройка этих файлов больше не нужна. Это отличный, более чистый код.

 

После этих изменений переключатель магазина, общая корзина покупок и вход пользователя стали намного стабильнее. Обязательно очистите кеш после внесения этих изменений.

 

Обновление ядра Magento2 и его влияние на .htaccessиindex.php

Перед внесением изменений в конфигурацию и файл мы обновили ядро ​​Magento2 с 2.1.0 до 2.1.3, используя composer. (Ссылка: обновить Magento 2.1.2 для 2.1.3 )

Мы не уверены, что это будет обязательной частью этой конфигурации нескольких магазинов, но мы выполнили ее, надеясь, что сайт будет более стабильным с последними обновлениями из 2.1.3.

У нас было изменено 3 файла, которые были частью файлов ядра и модуля (эти файлы игнорируются нашим контролем версий Git):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (файл конфигурации Grunt для компиляции нашей пользовательской темы css)

Когда мы обновили Magento2, эти файлы были сброшены до исходного состояния 2.1.3. Мы не должны были вручную чистить наши .htaccessи index.phpфайлы. Содержимое файла автоматически сбрасывалось при обновлении. Это был положительный побочный эффект.

Но был и плохой побочный эффект. Наш пользовательский код в файле конфигурации Grunt был сброшен и удален при обновлении ядра. Мы должны были вручную восстановить наши пользовательские строки кода в этом файле.

Я рекомендую сделать резервные копии файлов и БД перед обновлением ядра и изменениями конфигурации и файлов.


Сокращение Javascript может помочь

Сокращение JS сделало весь сайт более стабильным на нашем сайте.

Магазины =>
Конфигурация в разделе настроек =>
выбрать Default Config=>
Разработчик в разделе ADVANCED =>
Настройки JavaScript =>
  установить Merge JavaScript Filesв «Да» =>
  установить Enable JavaScript Bundlingв «Да» =>
  установить Minify JavaScript Filesв «Да» =>
затем очистить кеш

введите описание изображения здесь

Яс Накано
источник