마 젠토 2 : 사용자 로그인시 멀티 스토어 설정에서 두 번 로그인해야 함


9

공유 카트로 멀티 스토어를 설정하려고합니다. 그러나 때때로 사용자 로그인이 작동하지 않습니다.

Store Switcher잘 작동하지만, 프론트 엔드 User Login2, 3 일에는 Store클릭 나를 필요로 Sign In로그인에 두 번 버튼을 누릅니다.

다음과 같은 설정으로 다중 저장소를 설정했습니다.

다중 도메인 (가상 호스트)

하나를 사용하고 Website있습니다. 이 사이트에는 세 개가 있습니다 Stores. 도메인 이름은 하나의 공통 기본 도메인을 공유합니다. 추가 상점은 하위 도메인 을 사용 합니다.

기본 기본 도메인으로 magento2.com 을 만들었습니다 .

store2.magento2.com 을 두 번째 저장소로 만들었습니다 .

store3.magento2.com 을 세 번째 저장소로 만들었습니다 .

여기에 이미지 설명을 입력하십시오


루트 카테고리 및 테스트 제품

Store2 Root CategoryStore3 Root Category를 만들었습니다 . 또한 각 루트 범주 아래에 하위 범주를 만들었습니다.

여기에 이미지 설명을 입력하십시오

각 하위 범주에 하나의 테스트 제품을 추가했습니다.

여기에 이미지 설명을 입력하십시오


상점과 전망

기본 웹 사이트 저장소기본 저장소보기 에서 아무것도 변경하지 않았습니다 .

두 번째 저장소에 Store2Store View 2 를 만들었습니다 .

세 번째 상점에 대해 Store3Store View 3 을 작성 했습니다 .

여기에 이미지 설명을 입력하십시오


들어 상점 2 , 내가 설정 상점 2를Name선택한 상점 2 루트 카테고리Root Category.

여기에 이미지 설명을 입력하십시오


들어 스토어 뷰 2 , 내가 선택한 상점 2를 같이 Store사용 스토어보기 2Name하고, 입력 된 상점 2를Store Code.

여기에 이미지 설명을 입력하십시오


3의 Store경우 Store3을 로 설정 Name하고 Store3 루트 범주를 로 선택 했습니다 Root Category.

여기에 이미지 설명을 입력하십시오


들어 스토어보기 3 , 나는 선택 Store3을 같이 Store사용 스토어보기 3Name하고, 입력 store3을Store Code.

여기에 이미지 설명을 입력하십시오


URL 및 쿠키 설정

Configuration화면의 Store View드롭 다운 아래 5 가지 선택 사항 이 표시 됩니다.

  1. Default Config
  2. Main Website
  3. Default Store View
  4. 상점보기 2
  5. 상점보기 3

여기에 이미지 설명을 입력하십시오

Default Store View, Store View 2Store View 3에 대한 URL 및 쿠키 설정을 변경했습니다 .

Default Config및에 대한 URL 또는 쿠키 설정을 변경하지 않았습니다 Main Website.


에 대해 Default Store View변경했습니다 Cookie Path.

여기에 이미지 설명을 입력하십시오


들어 스토어 뷰 2 , 나는 변화 Base URL하고 Cookie Path.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


들어 스토어보기 3 , 나는 변화 Base URL하고 Cookie 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 loginon Store2Store3 이 훨씬 안정적이되었습니다. 여전히 10 번의 시도 중 로그인 페이지 1로 다시 리디렉션되었지만이 변경으로 인해 로그인이 더 잘 작동했습니다.

그러나 전체 사이트가 느려졌습니다 !!!

user login다중 Store설정 에서 올바르게 작동하도록 캐시를 올바르게 구성하는 방법이 있습니까?


안녕하세요 문제를 해결할 수 있었습니까? 내 사이트에서도 동일한 문제에 직면하고 있습니다. 단일 웹 사이트에서 상점간에 로그인 세부 사항이 공유되지 않습니다. 솔루션을 공유해 주실 수 있습니까
Zammuuz

답변:


0

새로운 구성으로 스토어 스위처를 만들고 로그인을 조금 더 안정적으로 만들 수있었습니다.

Urls에 상점 코드 추가

가장 큰 변화는 Add Store Code to Urls"예" 로 설정 되었습니다.

Stores =>
설정 섹션의 구성 =>
선택 Default Config=>
일반 섹션의 웹 =>
URL 옵션 => "예"로
  변경Add Store Code to Urls

여기에 이미지 설명을 입력하십시오

 

쿠키 도메인 제거

그런 다음 구성 페이지 Cookie Domain에서 Store2Store3 에서 값을 제거했습니다 .

저장 =>
구성 설정 섹션 =>
선택 상점 2 또는 Store3을 =>
일반 섹션 =>에서 웹
기본 쿠키 설정 =>
  에서 값을 제거 Cookie Domain하고 그것을 비워 둡니다

여기에 이미지 설명을 입력하십시오

 

.htaccess및 에서 맞춤 코드 제거index.php

그런 다음, 우리는 사용자 지정 코드 라인이 형성 제거 .htaccess하고 index.php.

새로운 구성에서는 이러한 파일에 대한 사용자 정의가 더 이상 필요하지 않았습니다. 이것은 훌륭하고 깔끔한 코드입니다.

 

이러한 변경 후, 상점 교환기, 공유 장바구니 및 사용자 로그인이 훨씬 안정적으로되었습니다. 이러한 변경을 수행 한 후 캐시를 지우십시오.

 

Magento2 코어 업그레이드 .htaccessindex.php

구성 및 파일을 변경하기 전에을 사용하여 Magento2 코어를 2.1.0에서 2.1.3으로 업그레이드했습니다 composer. (참조 : 2.1.3 용 Magento 2.1.2 업데이트 )

이 멀티 스토어 구성에 필요한 부분인지는 확실하지 않지만 2.1.3의 최신 업데이트로 사이트가 더 안정적이기를 기대했습니다.

코어 및 모듈 파일의 일부인 3 개의 파일이 수정되었습니다 (이 파일은 Git 버전 제어에서 무시 됨).

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js (사용자 정의 테마 CSS를 컴파일하기위한 그런 설정 파일)

Magento2를 업그레이드하면이 파일은 초기 상태 2.1.3으로 재설정됩니다. 우리 .htaccessindex.php파일 을 수동으로 정리할 필요가 없었습니다 . 파일 내용은 업그레이드에 의해 자동으로 재설정되었습니다. 이것은 긍정적 인 부작용이었습니다.

그러나 부작용도있었습니다. Grunt 구성 파일의 사용자 정의 코드는 코어 업그레이드로 재설정되고 지워졌습니다. 이 파일에서 사용자 정의 코드 행을 수동으로 복원해야했습니다.

이 핵심 업그레이드 및 구성 / 파일 변경을 수행하기 전에 파일 및 DB 백업을 수행하는 것이 좋습니다.


자바 스크립트를 축소하면 도움이 될 수 있습니다

JS 축소는 사이트에서 전체 사이트를보다 안정적으로 만들었습니다.

저장 =>
구성 설정 섹션에서 =>
선택 Default Config=>
고급 섹션에서 개발자 =>
자바 스크립트 설정 =>
  설정 Merge JavaScript Files"예"=>로
  설정 Enable JavaScript Bundling"예"=>에 대한
  설정을 Minify JavaScript Files"예"=>
다음, 캐시 지우기

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.