ログアウト時の処理を実装する
今回はよくある、ログアウト後にをリンクをクリックしたページに戻るように実装してみます。
まず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を使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー