Magento 2: la connexion de l'utilisateur nécessite parfois de se connecter deux fois lors de la configuration de plusieurs magasins

9

J'essaie de configurer un magasin multiple avec un panier partagé. Cependant, la connexion utilisateur ne fonctionne parfois pas.

Cela Store Switcherfonctionne bien, mais le frontend des User Login2 et 3 Storeme demande de cliquer Sign Indeux fois sur le bouton pour me connecter.

J'ai configuré plusieurs magasins avec ces configurations:

Multi domaine (hôtes virtuels)

J'en utilise un Website. Le site en aura trois Stores. Les noms de domaine partageront un domaine de base commun. Les magasins supplémentaires utiliseront des sous-domaines .

J'ai créé magento2.com comme domaine de base par défaut.

J'ai créé store2.magento2.com en tant que 2e magasin.

J'ai créé store3.magento2.com en tant que 3e magasin.

entrez la description de l'image ici


Catégories racine et produits de test

J'ai créé la catégorie racine Store2 et la catégorie racine Store3 . J'ai également créé des sous-catégories sous chaque catégorie racine.

entrez la description de l'image ici

J'ai ajouté un produit de test à chaque sous-catégorie.

entrez la description de l'image ici


Magasins et vues

Je n'ai rien changé sur la boutique principale du site Web et la vue par défaut de la boutique .

J'ai créé Store2 et Store View 2 pour le 2ème magasin.

J'ai créé Store3 et Store View 3 pour le 3e magasin.

entrez la description de l'image ici


Pour Store2 , j'ai défini Store2 comme Nameet sélectionné la catégorie racine Store2 comme Root Category.

entrez la description de l'image ici


Pour Store View 2 , j'ai sélectionné Store2 as Store, utilisé Store View 2 as Nameet entré store2 as Store Code.

entrez la description de l'image ici


Pour le 3ème Store, j'ai défini Store3 comme Nameet sélectionné la catégorie racine Store3 comme Root Category.

entrez la description de l'image ici


Pour Store View 3 , j'ai sélectionné Store3 as Store, utilisé Store View 3 as Nameet entré store3 as Store Code.

entrez la description de l'image ici


Paramètre URL et cookie

L' Configurationécran affiche maintenant 5 choix sous le Store Viewmenu déroulant:

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

entrez la description de l'image ici

J'ai modifié les paramètres d'URL et de cookies pour Default Store View, Store View 2 et Store View 3 .

Je n'ai PAS modifié les paramètres d'URL ou de cookie pour Default Configet Main Website.


Car Default Store View, j'ai changé Cookie Path.

entrez la description de l'image ici


Pour Store View 2 , j'ai changé Base URLet Cookie Path.

entrez la description de l'image ici

entrez la description de l'image ici


Pour Store View 3 , j'ai changé Base URLet Cookie Path.

entrez la description de l'image ici

entrez la description de l'image ici


Partage de compte

Pour partager les comptes d'utilisateurs et le panier entre plusieurs magasins, je suis passé Share Customer Accountsde "Par site Web" à Global sous Default Config.

entrez la description de l'image ici


changement de .htaccess

J'ai ajouté ces lignes en haut du .htaccessfichier dans le répertoire racine du projet.

#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


changement index.php

En utilisant le Store Switcher, parfois nécessaire de cliquer deux fois pour passer de store2 / 3 à la valeur par défaut. Pour résoudre ce problème, j'ai dû réinitialiser la valeur de $_COOKIE['store']l'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);


La connexion de l'utilisateur nécessite parfois de cliquer deux fois

Avec la configuration ci-dessus, le Store Switcherfonctionne correctement. Les achats Cartsont partagés entre les 3 magasins pour les utilisateurs connectés et non connectés.

entrez la description de l'image ici

Cependant, sur Store2 et Store3 , le frontend user loginredirige parfois vers la même page de connexion. Si j'appuie sur le Sign Inbouton de la page de connexion redirigée (2e fois pour cliquer sur ce bouton), cela me permet de me connecter.

Existe-t-il un moyen de résoudre ce problème?


Mise à jour: désactivation Cache

J'ai désactivé la mise en cache depuis la ligne de commande:

php bin/magento cache:disable

Avec le cache désactivé, le user loginsur Store2 et Store3 est devenu beaucoup plus stable. Il a toujours redirigé vers la page de connexion 1 tentative sur 10, mais cette modification a rendu la connexion plus efficace.

Cependant, l'ensemble du site est devenu lent !!!

Existe-t-il un moyen de configurer correctement le cache pour user loginqu'il fonctionne correctement sur une Storeconfiguration multiple ?

Noemi Quezada
la source
Salut Avez-vous réussi à résoudre le problème? Je suis également confronté au même problème sur mon site. Les détails de connexion ne sont pas partagés entre les magasins sous un seul site Web. Pouvez-vous s'il vous plaît partager votre solution
Zammuuz

Réponses:

0

Nous avons réussi à rendre le commutateur de magasin et à nous connecter un peu plus stable avec la nouvelle configuration.

Ajouter le code du magasin aux URL

Le plus grand changement était de mettre Add Store Code to Urls"Oui".

Magasins =>
Configuration dans la section Paramètres =>
sélectionnez Default Config=>
Web dans la section GÉNÉRAL =>
Options d'url =>
  changez Add Store Code to Urlsen "Oui"

entrez la description de l'image ici

 

Supprimer le domaine des cookies

Ensuite, nous avons supprimé la Cookie Domainvaleur de Store2 et Store3 de la page de configuration.

Magasins =>
Configuration dans la section Paramètres =>
sélectionnez Store2 ou Store3 =>
Section Web dans GENERAL =>
Paramètres de cookies par défaut =>
  supprimez la valeur Cookie Domainet laissez-la vide

entrez la description de l'image ici

 

Supprimer les codes personnalisés de .htaccessetindex.php

Ensuite, nous avons supprimé le formulaire de lignes de code personnalisées .htaccesset index.php.

Avec la nouvelle configuration, la personnalisation de ces fichiers n'était plus nécessaire. C'est un code génial et plus propre.

 

Après ces modifications, le commutateur de magasin, le panier d'achat partagé et la connexion utilisateur sont devenus beaucoup plus stables. Assurez-vous de vider le cache après avoir apporté ces modifications.

 

Mise à niveau du noyau Magento2 et son effet sur .htaccessetindex.php

Avant d'effectuer des modifications de configuration et de fichier, nous avons mis à niveau le noyau Magento2 de 2.1.0 à 2.1.3 à l'aide de composer. (Référence: mise à jour de Magento 2.1.2 pour 2.1.3 )

Nous ne sommes pas sûrs que ce sera une partie requise pour cette configuration multi-magasins, mais nous l'avons effectuée en espérant que le site sera plus stable avec les dernières mises à jour de 2.1.3

Nous avons modifié 3 fichiers qui faisaient partie des fichiers core et module (ces fichiers sont ignorés par notre contrôle de version Git):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (fichier de configuration Grunt pour compiler notre css de thème personnalisé)

Lorsque nous avons mis à niveau Magento2, ces fichiers sont réinitialisés à l'état initial de 2.1.3. Nous n'avons PAS eu à nettoyer manuellement nos fichiers .htaccesset index.php. Le contenu du fichier a été automatiquement réinitialisé par la mise à niveau. C'était un effet secondaire positif.

Mais il y avait aussi un mauvais effet secondaire. Notre code personnalisé dans le fichier de configuration Grunt a été réinitialisé et effacé par la mise à niveau principale. Nous avons dû restaurer manuellement nos lignes de code personnalisées sur ce fichier.

Je recommande d'effectuer des sauvegardes de fichiers et de bases de données avant d'effectuer cette mise à niveau principale et les modifications de configuration / fichier.


Réduire Javascript pourrait aider

La réduction de JS a rendu l'ensemble du site plus stable sur notre site.

Magasins =>
Configuration dans la section Paramètres =>
sélectionnez Default Config=>
Développeur dans la section AVANCÉ =>
Paramètres JavaScript =>
  défini Merge JavaScript Filessur "Oui" =>
  défini Enable JavaScript Bundlingsur "Oui" =>
  défini Minify JavaScript Filessur "Oui" =>
puis, videz le cache

entrez la description de l'image ici

Yas Nakano
la source