Magento 2: Às vezes, o login do usuário exige o login duas vezes na configuração de várias lojas


9

Estou tentando configurar uma loja múltipla com carrinho compartilhado. No entanto, o login do usuário às vezes não funciona.

A Store Switcherfina funciona, mas o frontend User Loginem 2º e 3º Storeexige que eu clique no Sign Inbotão duas vezes para login.

Eu tenho várias lojas de configuração com estas configurações:

Vários Domínios (Hosts Virtuais)

Eu estou usando um Website. O site terá três Stores. Os nomes de domínio compartilharão um domínio base comum. As lojas adicionais usarão subdomínios .

Criei magento2.com como o domínio base padrão.

Criei store2.magento2.com como a segunda loja.

Criei store3.magento2.com como a 3ª loja.

insira a descrição da imagem aqui


Categorias de raiz e produtos de teste

Criei a categoria raiz Store2 e a categoria raiz Store3 . Também criei subcategorias em cada categoria raiz.

insira a descrição da imagem aqui

Adicionei um produto de teste a cada subcategoria.

insira a descrição da imagem aqui


Lojas e Vistas

NÃO alterei nada na loja principal do site e na exibição padrão da loja .

Criei a Store2 e a Store View 2 para a 2ª loja.

Criei Store3 e Store View 3 para a 3ª loja.

insira a descrição da imagem aqui


Para Store2 , eu defino Store2 como Namee selecionei Store2 Root Category como Root Category.

insira a descrição da imagem aqui


Para a Visualização da loja 2 , selecionei a Loja2 como Store, usei a Visualização da loja 2 como Namee entrei na loja2 como Store Code.

insira a descrição da imagem aqui


Para o terceiro Store, defino Store3 como Namee selecione Store3 Root Category como Root Category.

insira a descrição da imagem aqui


Para a Visualização da loja 3 , selecionei a Loja3 como Store, usei a Visualização da loja 3 como Namee entrei na loja3 como Store Code.

insira a descrição da imagem aqui


Configuração de URL e Cookie

A Configurationtela agora mostra 5 opções no Store Viewmenu suspenso:

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

insira a descrição da imagem aqui

Alterei as configurações de URL e cookie para Default Store View, Visualização da loja 2 e Visualização da loja 3 .

NÃO alterei as configurações de URL ou cookie para Default Confige Main Website.


Pois Default Store Viewmudei Cookie Path.

insira a descrição da imagem aqui


Para o Store View 2 , eu mudei Base URLe Cookie Path.

insira a descrição da imagem aqui

insira a descrição da imagem aqui


Para o Store View 3 , eu mudei Base URLe Cookie Path.

insira a descrição da imagem aqui

insira a descrição da imagem aqui


Compartilhamento de conta

Para compartilhar contas de usuário e carrinho de compras entre várias lojas, mudei Share Customer Accountsde "Por site" para Global em Default Config.

insira a descrição da imagem aqui


.htaccess change

Eu adicionei essas linhas na parte superior do .htaccessarquivo no diretório raiz do projeto.

#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


mudança index.php

Usando o Store Switcher, às vezes é necessário clicar duas vezes para alternar de store2 / 3 para o padrão. Para corrigir isso, tive que redefinir o valor para $_COOKIE['store']no 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);


Às vezes, o login do usuário exige clicar duas vezes

Com a configuração acima, o Store Switcherestá funcionando bem. As compras Cartsão compartilhadas entre todas as 3 lojas para usuários conectados e não conectados.

insira a descrição da imagem aqui

No entanto, na Store2 e Store3 , o front-end user loginàs vezes redireciona de volta para a mesma página de logon. Se eu pressionar o Sign Inbotão na página de login redirecionada (pela segunda vez para clicar neste botão), vamos fazer o login.

Existe alguma forma de corrigir esse problema?


Atualização: desativando Cache

Desativei o cache da linha de comando:

php bin/magento cache:disable

Com o cache desativado, user loginno Store2 e Store3 se tornou muito mais estável. Ele ainda foi redirecionado de volta para a página de login 1 em 10 tentativas, mas essa alteração fez com que o login funcionasse melhor.

No entanto, todo o site ficou lento !!!

Existe uma maneira de configurar corretamente o cache para que ele user loginfuncione corretamente em uma Storeconfiguração múltipla ?


Oi Você conseguiu corrigir o problema? Também estou enfrentando o mesmo problema no meu site. Os detalhes de login não são compartilhados entre as lojas no site único. Você pode, por favor, compartilhar sua solução
Zammuuz

Respostas:


0

Conseguimos tornar o alternador de lojas e o login um pouco mais estáveis ​​com a nova configuração.

Adicionar código de loja aos URLs

A maior mudança foi definir Add Store Code to Urls"Sim".

Lojas =>
Configuração na seção Configurações =>
selecione Default Config=>
Web na seção GERAL =>
Opções de URL =>
  altere Add Store Code to Urlspara "Sim"

insira a descrição da imagem aqui

 

Remover domínio de cookie

Em seguida, removemos o Cookie Domainvalor do Store2 e Store3 da página Configuração.

Lojas =>
Configuração na seção Configurações =>
selecione Loja2 ou Loja3 =>
Web na seção GERAL =>
Configurações Padrão de Cookies =>
  remova o valor Cookie Domaine deixe em branco

insira a descrição da imagem aqui

 

Remova os códigos personalizados de .htaccesseindex.php

Em seguida, removemos as linhas de código personalizadas do formulário .htaccesse index.php.

Com a nova configuração, a personalização desses arquivos não era mais necessária. Isso é ótimo, código mais limpo.

 

Após essas alterações, o alternador da loja, o carrinho de compras compartilhado e o login do usuário tornaram-se muito mais estáveis. Certifique-se de limpar o cache depois de fazer essas alterações.

 

Atualização do núcleo Magento2 e seus efeitos sobre .htaccesseindex.php

Antes de fazer alterações na configuração e no arquivo, atualizamos o núcleo do Magento2 de 2.1.0 para 2.1.3 usando composer. (Referência: Update Magento 2.1.2 for 2.1.3 )

Não temos certeza de que essa será uma parte necessária para essa configuração de várias lojas, mas a executamos esperando que o site seja mais estável com as atualizações mais recentes da 2.1.3

Foram modificados três arquivos, que faziam parte dos arquivos principais e do módulo (esses arquivos são ignorados pelo nosso controle de versão do Git):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (arquivo de configuração do Grunt para compilar nosso css de tema personalizado)

Quando atualizamos o Magento2, esses arquivos são redefinidos para o estado inicial de 2.1.3. NÃO tivemos que limpar manualmente nossos arquivos .htaccesse index.php. O conteúdo do arquivo foi redefinido automaticamente pela atualização. Este foi um efeito colateral positivo.

Mas também houve um efeito colateral ruim. Nosso código personalizado no arquivo de configuração do Grunt foi redefinido e apagado pela atualização principal. Tivemos que restaurar manualmente nossas linhas de código personalizadas nesse arquivo.

Eu recomendo fazer backups de arquivos e banco de dados antes de fazer essa atualização principal e alterações de configuração / arquivo.


Minimizar o Javascript pode ajudar

A redução da JS tornou o site inteiro mais estável em nosso site.

Lojas =>
Configuração na seção Configurações =>
selecione Default Config=>
Desenvolvedor na seção AVANÇADO =>
Configurações de JavaScript =>
  defina Merge JavaScript Filescomo "Sim" =>
  defina Enable JavaScript Bundlingcomo "Sim" =>
  defina Minify JavaScript Filescomo "Sim" => defina como "Sim" =>
depois limpe o cache

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.