EC-CUBE4でフロント側でログアウトしたときに管理画面もログアウトする問題に対応する方法

EC-CUBE4でフロント側でログアウトしたときに管理画面もログアウトする問題に対応する方法です。

注意!EC-CUBE4.0.1ではカート周りでバグりますので利用しないでください。

只今、ここで対応しています。

EC-CUBE4ではフロント側と管理側の両方でログインしていた場合、片方でログアウトすると両方ログアウトしてしまう問題があります。

これはSymfonyのSessionLogoutHandlerが有効化されていて、ログアウト時にセッションが破棄されてしまうことが影響しています。

なので、以下のようにsecurity.yamlに「invalidate_session」を無効化するよう指定してあげれば解決するかと思います。

security:
    encoders:
        # Our user class and the algorithm we'll use to encode passwords
        # https://symfony.com/doc/current/security.html#c-encoding-the-user-s-password
        Eccube\Entity\Member:
          id: Eccube\Security\Core\Encoder\PasswordEncoder
        Eccube\Entity\Customer:
          id: Eccube\Security\Core\Encoder\PasswordEncoder
    providers:
        # https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
        # In this example, users are stored via Doctrine in the database
        # To see the users at src/App/DataFixtures/ORM/LoadFixtures.php
        # To load users from somewhere else: https://symfony.com/doc/current/security/custom_provider.html
        member_provider:
            id: Eccube\Security\Core\User\MemberProvider
        customer_provider:
            id: Eccube\Security\Core\User\CustomerProvider
    # https://symfony.com/doc/current/security.html#initial-security-yml-setup-authentication
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            pattern: '^/%eccube_admin_route%/'
            anonymous: true
            provider: member_provider
            form_login:
                check_path: admin_login
                login_path: admin_login
                csrf_token_generator: security.csrf.token_manager
                default_target_path: admin_homepage
                username_parameter: 'login_id'
                password_parameter: 'password'
                use_forward: true
                success_handler: eccube.security.success_handler
                failure_handler: eccube.security.failure_handler
            logout:
                path: admin_logout
                target: admin_login
                invalidate_session: false // セッションを維持するためここを追加
        customer:
            pattern: ^/
            anonymous: true
            provider: customer_provider
            remember_me:
                secret: '%kernel.secret%'
                lifetime: 3600
                name: eccube_remember_me
                remember_me_parameter: 'login_memory'
            form_login:
                check_path: mypage_login
                login_path: mypage_login
                csrf_token_generator: security.csrf.token_manager
                default_target_path: homepage
                username_parameter: 'login_email'
                password_parameter: 'login_pass'
                use_forward: true
                success_handler: eccube.security.success_handler
                failure_handler: eccube.security.failure_handler
            logout:
                path: logout
                target: homepage
                invalidate_session: false // セッションを維持するためここを追加

    access_decision_manager:
        strategy: unanimous
        allow_if_all_abstain: false

 

EC-CUBEにプルリク出しましたので、マージされれば次回のバージョンに反映されるかと思います。

https://github.com/EC-CUBE/ec-cube/pull/4082

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください