basercms5、プラグインやテーマ無効時 isAdminSystem管理画面判定が効かない処理がありますか?

フロント用の会員プラグインを作成する過程で「ControllerEventListener」から共通のリダイレクトを設定した所
リダイレクトが入ってcsrfエラーになります。
(多分、自分の書き方が悪いのかなと思いますが…)

管理画面は除外してフロントのみリダイレクト設定できる書き方教えていただけると大変助かります。

テーマやプラグイン無効時
CSRF token from either the request body or request headers did not match or is missing.
エラー: アドレス ‘/baser/admin/baser-core/themes/delete/BcThemeSample’ に送信されたリクエストは無効です。

コンテンツ管理
ゴミ箱に移動しようとして失敗しました。
(404) Not Found
{“message”:“Not Found”,“url”:“/baser/api/admin/member/members/login”,“code”:404}

class MemberControllerEventListener extends BcControllerEventListener
{
    public $events = ['startup'];

    public function startup(Event $event)
    {
        if(BcUtil::isAdminSystem()) return;
        
        $controller = $event->getSubject();

        if($controller->getRequest()->getSession()->read('Auth.Member') !== null){
            // セッションが存在する場合のリダイレクト
            
        }else{
           
            if($controller->getName() !== "Members"){
            //他のプラグインやテーマ無効時エラーになる
            return $controller->redirect([
                'plugin' => 'Member',
                'controller' => 'Members',
                'action' => 'login',
            ]);
            }
        }
    }
}

【環境情報】
・baserCMSのバージョン:5
・レンタルサーバー名:エックスサーバー
・phpバージョン:PHP8.1.12

@tera3 prefixで判断した方がいいかもしれませんね。

$controller->getRequest()->getParam('prefix');

必要なプレフィックスの場合だけ通すとした方がよさそうです。

また、気を付いけないといけないのがCSRFトークン取得のURLもスルーさせないといけません。

/baser-core/bc_form/get_token

これは $controller->getRequest()->getPath() を利用した方がよいかもです。

ありがとうございます。解決しました。

$exclusion_admin = ["/baser-core/bc_form/get_token"];
     
        if(
            in_array($controller->getRequest()->getPath(),$exclusion_admin,true)
            || BcUtil::isAdminSystem()
            ||
            $controller->getRequest()->getParam('prefix') === "Api/Admin"
            ){
                //コンテンツ管理 Api/Adminから削除が利用されている /baser/api/admin/baser-core/contents/delete
                //preg_match("/^\/baser\/api\/admin/",$controller->getRequest()->getPath())
                return;
         }