Magento 2: el inicio de sesión del usuario a veces requiere iniciar sesión dos veces en la configuración de varias tiendas

9

Estoy tratando de configurar una tienda múltiple con carrito compartido. Sin embargo, el inicio de sesión del usuario a veces no funciona.

La Store Switcherobras excelentes, pero la interfaz User Logindías 2 y 3 Storeme obliga a hacer clic en el Sign Inbotón dos veces para inicio de sesión.

He configurado varias tiendas con estas configuraciones:

Multi Dominio (Hosts Virtuales)

Estoy usando uno Website. El sitio tendrá tres Stores. Los nombres de dominio compartirán un dominio base común. Las tiendas adicionales usarán subdominios .

He creado magento2.com como el dominio de base por defecto.

He creado store2.magento2.com como la segunda tienda.

He creado store3.magento2.com como la tercera tienda.

ingrese la descripción de la imagen aquí


Categorías de raíz y productos de prueba

He creado store2 Raíz de la categoría y Store3 Raíz de la categoría . También creé subcategorías en cada categoría raíz.

ingrese la descripción de la imagen aquí

Agregué un producto de prueba a cada subcategoría.

ingrese la descripción de la imagen aquí


Tiendas y vistas

NO cambié nada en la Tienda del sitio web principal y en la Vista de tienda predeterminada .

He creado store2 y tienda Ver 2 para la segunda tienda.

He creado Store3 y tienda Ver 3 para la tercera tienda.

ingrese la descripción de la imagen aquí


Para Store2 , configuré Store2 como Namey seleccioné Store2 Root Category como Root Category.

ingrese la descripción de la imagen aquí


Para Store View 2 , seleccioné Store2 como Store, utilicé Store View 2 como Name, e ingresé store2 como Store Code.

ingrese la descripción de la imagen aquí


Para el tercero Store, configuré Store3 como Namey seleccioné Store3 Root Category como Root Category.

ingrese la descripción de la imagen aquí


Para Store View 3 , seleccioné Store3 como Store, utilicé Store View 3 como Name, e ingresé store3 como Store Code.

ingrese la descripción de la imagen aquí


Configuración de URL y cookies

La Configurationpantalla ahora muestra 5 opciones en el Store Viewmenú desplegable:

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

ingrese la descripción de la imagen aquí

He cambiado la configuración de URL y de la galleta por Default Store View, tienda Vista 2 , y tienda Ver 3 .

NO cambié la configuración de URL o Cookie para Default Configy Main Website.


Porque Default Store Viewyo cambié Cookie Path.

ingrese la descripción de la imagen aquí


Para Store View 2 , cambié Base URLy Cookie Path.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Para Store View 3 , cambié Base URLy Cookie Path.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Compartir cuenta

Para compartir cuentas de usuario y carrito de compras entre varias tiendas, cambié Share Customer Accountsde "Por sitio web" a Global en Default Config.

ingrese la descripción de la imagen aquí


.htaccess change

Agregué estas líneas en la parte superior del .htaccessarchivo en el directorio raíz del proyecto.

#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


cambio index.php

Usando Store Switcher, a veces se requiere hacer clic dos veces para cambiar de store2 / 3 al predeterminado Para solucionar esto, tuve que restablecer el valor $_COOKIE['store']en 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);


El inicio de sesión del usuario a veces requiere hacer clic dos veces

Con la configuración anterior, Store Switcherfunciona correctamente. Las compras Cartse comparten entre las 3 tiendas tanto para los usuarios que han iniciado sesión como para los que no lo han hecho.

ingrese la descripción de la imagen aquí

Sin embargo, en Store2 y Store3 , la interfaz a user loginveces redirige a la misma página de inicio de sesión. Si presiono el Sign Inbotón en la página de inicio de sesión redirigida (segunda vez que hago clic en este botón), me permite iniciar sesión.

¿Hay alguna forma de solucionar este problema?


Actualización: deshabilitar Cache

Deshabilité el almacenamiento en caché desde la línea de comandos:

php bin/magento cache:disable

Con el caché deshabilitado, user loginen Store2 y Store3 se volvió mucho más estable. Todavía redirigió a la página de inicio de sesión 1 de cada 10 intentos, pero este cambio hizo que el inicio de sesión funcionara mejor.

¡Sin embargo, todo el sitio se volvió lento!

¿Hay alguna manera de configurar correctamente el caché para que user loginfuncione correctamente en una Storeconfiguración múltiple ?

Noemí Quezada
fuente
Hola, ¿pudiste solucionar el problema? También estoy enfrentando el mismo problema en mi sitio. Los detalles de inicio de sesión no se comparten entre las tiendas en un solo sitio web. ¿Podría por favor compartir su solución
Zammuuz

Respuestas:

0

Logramos hacer que el conmutador de la tienda y el inicio de sesión sean un poco más estables con la nueva configuración.

Agregar código de tienda a las URL

El mayor cambio fue establecer Add Store Code to Urls"Sí".

Tiendas =>
Configuración en la sección Configuración =>
seleccione Default Config=>
Web en la sección GENERAL =>
Opciones de URL =>
  cambie Add Store Code to Urlsa "Sí"

ingrese la descripción de la imagen aquí

 

Eliminar el dominio de cookies

Luego, eliminamos el Cookie Domainvalor de Store2 y Store3 de la página de Configuración.

Tiendas =>
Configuración en la sección Configuración =>
seleccione Tienda2 o Tienda3 =>
Web en la sección GENERAL =>
Configuración predeterminada de cookies =>
  elimine el valor Cookie Domainy déjelo en blanco

ingrese la descripción de la imagen aquí

 

Eliminar códigos personalizados de .htaccessyindex.php

Luego, eliminamos las líneas de código personalizadas .htaccessy index.php.

Con la nueva configuración, la personalización de estos archivos ya no era necesaria. Este es un código genial y más limpio.

 

Después de estos cambios, el conmutador de la tienda, el carrito de compras compartido y el inicio de sesión del usuario se volvieron mucho más estables. Asegúrese de borrar el caché después de realizar estos cambios.

 

Actualización principal de Magento2 y su efecto en .htaccessyindex.php

Antes de realizar cambios en la configuración y el archivo, actualizamos el núcleo Magento2 de 2.1.0 a 2.1.3 usando composer. (Referencia: Actualización de Magento 2.1.2 para 2.1.3 )

No estamos seguros de que esto sea una parte necesaria para esta configuración de varias tiendas, pero lo realizamos con la esperanza de que el sitio sea más estable con las últimas actualizaciones de 2.1.3

Modificamos 3 archivos que formaban parte de los archivos principales y de módulo (nuestro control de versiones de Git ignora estos archivos):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (archivo de configuración de Grunt para compilar nuestro tema personalizado css)

Cuando actualizamos Magento2, estos archivos se restablecen al estado inicial de 2.1.3. No tuvimos que limpiar manualmente nuestros .htaccessy index.phparchivos. La actualización restableció automáticamente el contenido del archivo. Este fue un efecto secundario positivo.

Pero también hubo un efecto secundario negativo. Nuestro código personalizado en el archivo de configuración de Grunt fue restablecido y borrado por la actualización central. Tuvimos que restaurar manualmente nuestras líneas de código personalizadas en este archivo.

Recomiendo tomar copias de seguridad de archivos y bases de datos antes de hacer esta actualización principal y los cambios de configuración / archivo.


Reducir Javascript podría ayudar

La reducción de JS hizo que todo el sitio fuera más estable en nuestro sitio.

Tiendas =>
Configuración en la sección Configuración =>
seleccionar Default Config=>
Desarrollador en la sección AVANZADA =>
Configuración de JavaScript =>
  establecer Merge JavaScript Filesen "Sí" =>
  establecer Enable JavaScript Bundlingen "Sí" =>
  establecer Minify JavaScript Filesen "Sí" =>
luego, borrar caché

ingrese la descripción de la imagen aquí

Yas Nakano
fuente