Magento 2: Для входу користувачів іноді потрібно двічі увійти під час налаштування кількох магазинів


9

Я намагаюся налаштувати кілька магазинів із спільним кошиком. Однак вхід користувача іноді не працює.

Store SwitcherПрацює відмінно, але зовнішній інтерфейс User Loginна другому і 3 Storeвимагає від мене , щоб натиснути на Sign Inкнопку двічі для входу.

У мене налаштування декількох магазинів із цими налаштуваннями:

Багатодомен (віртуальні хости)

Я використовую один Website. На сайті буде три Stores. Імена домену поділять один загальний базовий домен. У додаткових магазинах будуть використовуватися субдомени .

Я створив magento2.com як базовий домен за замовчуванням.

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

Я створив store3.magento2.com як 3-й магазин.

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


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

Я створив Store2 Root Category та Store3 Root Category . Я також створив підкатегорії під кожною категорією Root.

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

Я додав по одному тестовому продукту до кожної підкатегорії.

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


Магазини та види

Я не змінив нічого в головному магазині веб-сайтів і в магазині за замовчуванням .

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

Я створив Store3 та Store View 3 для 3-го магазину.

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


Для Store2 я встановив Store2 як Nameі вибрав Кореневу категорію Store2 як Root Category.

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


Для магазину View 2 я вибрав Store2 як Store, використовував Store View 2 як Nameі ввів store2 як Store Code.

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


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

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


Для перегляду магазину 3 я вибрав Store3 як Store, використовував Store View 3 як Nameі ввів store3 як Store Code.

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


Налаштування URL-адреси та файлів cookie

Зараз на Configurationекрані відображається 5 варіантів у Store Viewспадному меню:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. Перегляд магазину 2
  5. Перегляд магазину 3

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

Я змінив налаштування URL-адрес і файлів cookie для Default Store View, Перегляд магазину 2 та Перегляд магазину 3 .

Я НЕ змінив налаштування URL-адреси чи файлів cookie для Default Configта Main Website.


Бо Default Store Viewя змінився Cookie Path.

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


Для магазину View 2 я змінив Base URLі Cookie Path.

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

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


Для перегляду магазину 3 я змінив Base URLі Cookie Path.

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

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


Обмін рахунком

Для облікових записів користувачів акцій і покупок кошика серед безлічі магазинів, я змінився Share Customer Accountsвід «Per Сайту» в Global під Default Config.

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


.зміна зміни доступу

Я додав ці рядки у верхній частині .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налаштувань?


Привіт, Ви змогли виправити проблему ?? Я також стикаюся з тим же питанням на своєму сайті. Дані про вхід не поділяються серед магазинів на одному веб-сайті. Ви можете поділитися своїм рішенням
Заммууз,

Відповіді:


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=>
Розробник у розділі ДОПОМОГА = =>
Налаштування JavaScript =>
  встановити Merge JavaScript Files"Так" =>
  встановити Enable JavaScript Bundlingна "Так" =>
  встановити Minify JavaScript Files"Так" =>
тоді, очистити кеш

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.