ログアウト時の処理を実装する
今回はよくある、ログアウト後にをリンクをクリックしたページに戻るように実装してみます。
まずsrc/Eccube/Security/Http/AuthenticationにEccubeLogoutSuccessHandlerというクラスを設置します。
<?php namespace Eccube\Security\Http\Authentication; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; class EccubeLogoutSuccessHandler implements LogoutSuccessHandlerInterface { public function onLogoutSuccess(\Symfony\Component\HttpFoundation\Request $request) { $referer = $request->headers->get('referer'); return new RedirectResponse($referer); } }
app/config/eccube/services.yamlに追加
eccube.security.logout_success_handlerという名前でサービス登録しておきます。
eccube.security.logout_success_handler: class: Eccube\Security\Http\Authentication\EccubeLogoutSuccessHandler
app/config/eccube/packages/security.yamlに追加
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 success_handler: eccube.security.logout_success_handler
security→firewalls→customer→logoutに、success_handler: eccube.security.logout_success_handlerを記載します。
ここまで実装を行うと、ログアウト時にEccubeLogoutSuccessHandler::onLogoutSuccessが実行され、元のページへリダイレクトされるようになります。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。