Magento 2:用户登录有时需要在多商店设置中登录两次


9

我正在尝试使用共享购物车设置一个多商店。但是,用户登录有时不起作用。

Store Switcher工作正常,但前端User Login的第二和第三个Store要求我按一下Sign In按钮两次登录。

我通过以下设置设置了多个商店:

多域(虚拟主机)

我正在使用一个Website。该站点将有三个Stores。域名将共享一个公共基本域。其他商店将使用子域

我创建了magento2.com作为默认基本域。

我创建了store2.magento2.com作为第二家商店。

我创建了store3.magento2.com作为第三家商店。

在此处输入图片说明


根类别和测试产品

我创建了Store2 Root CategoryStore3 Root Category。我还在每个根目录类别下创建了子类别。

在此处输入图片说明

我在每个子类别中添加了一个测试产品。

在此处输入图片说明


商店和景观

我没有在“ 主要网站商店”和“ 默认商店视图”上进行任何更改。

我为第二家商店创建了Store2Store View 2

我为第三家商店创建了Store3Store View 3

在此处输入图片说明


对于Store2,我将Store2设置为,Name并将Store2根目录类别选择为Root Category

在此处输入图片说明


对于Store View 2,我选择Store2Store,使用Store View 2Name,并输入store2Store Code

在此处输入图片说明


对于3rd Store,我将Store3设置为,Name并将Store3根目录类别选择为Root Category

在此处输入图片说明


对于Store View 3,我选择Store3Store,使用Store View 3Name,并输入store3作为Store Code

在此处输入图片说明


URL和Cookie设置

Configuration现在屏幕显示下5个选项Store View下拉菜单:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. 店铺检视2
  5. 店铺景观3

在此处输入图片说明

我更改了Default Store View商店视图2 ”和“ 商店视图3”的 URL和Cookie设置 。

我没有改变URL或Cookie设置为Default ConfigMain Website


因为Default Store View,我改变了Cookie Path

在此处输入图片说明


对于商店查看2,我改变了Base URLCookie Path

在此处输入图片说明

在此处输入图片说明


对于商店查看3,我改变了Base URLCookie Path

在此处输入图片说明

在此处输入图片说明


账户共享

要在多个商店之间共享用户帐户和购物车,我Share Customer Accounts从下的“每个网站” 更改为“ 全局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个商店中共享给已登录和未登录用户。

在此处输入图片说明

但是,在Store2Store3上,前端user login有时会重定向回同一登录页面。如果按Sign In重定向登录页面上的按钮(第二次单击此按钮),就让我登录。

有没有办法解决这个问题?


更新:禁用 Cache

我从命令行禁用了缓存:

php bin/magento cache:disable

随着禁用缓存,user login商店2Store3变得更加稳定。在10次尝试中,它仍然重定向回登录页面1,但是此更改使登录工作更好。

但是,整个站点变慢了!!!

有没有一种方法可以正确配置缓存以使其在user login多重Store设置中正确执行?


嗨,您能解决这个问题吗?我的网站上也遇到了同样的问题。登录信息不会在单个网站下的商店之间共享。您能否分享您的解决方案
Zammuuz

Answers:


0

通过新配置,我们设法使商店切换台和登录更加稳定。

将商店代码添加到Urls

最大的更改是设置Add Store Code to Urls为“是”。

存储=>
“设置”部分中的配置=>
选择Default Config=>“
常规”部分中的“ Web” =>“
URL选项” =>
  更改Add Store Code to Urls为“是”

在此处输入图片说明

 

删除Cookie域

然后,我们从“配置”页面中删除Cookie DomainStore2Store3中的值。

商店=>
设置部分中的配置=>
选择商店2商店3 =>
常规部分中的Web =>
默认Cookie设置=>
  从中删除该值Cookie Domain并将其留空

在此处输入图片说明

 

.htaccess和删除自定义代码index.php

然后,我们删除了自定义代码行form .htaccessindex.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的初始状态。我们不必手动清理我们的.htaccessindex.php文件。升级会自动重置文件内容。这是一个积极的副作用。

但是也有不良的副作用。核心升级已重置并清除了Grunt配置文件中的自定义代码。我们必须手动在此文件上还原我们的自定义代码行。

我建议先进行文件和数据库备份,然后再进行此核心升级和配置/文件更改。


缩小JavaScript可能会有所帮助

缩小JS使整个网站在我们的网站上更加稳定。


在“设置”部分中存储=> 配置=>
选择Default Config=>“
高级”部分中的开发人员=>
JavaScript设置=>
  设置Merge JavaScript Files为“是” =>
  设置Enable JavaScript Bundling为“是” =>
  设置Minify JavaScript Files为“是” =>
然后清除缓存

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.