EC-CUBE4でトップページ等以外はログインを必須にする簡易的な会員制サイトを作る方法

EC-CUBE Advent Calendar 2020 22日目の記事です。

お客さんの要望で会員制のクローズドサイトを作成したいという要望が時々あります。

クローズドサイトといっても完全にクローズドにするのか、トップページと会員登録だけ公開しておくのか、専用IDを別途発行して対応するのかなど色々とあります。

今回は、トップページと会員登録だけを公開した会員制サイトのカスタマイズを紹介します。

ログインが必要となる処理の設定

ログインを必須とするのは、EccubeExtensionクラスに定義を追加するだけで対応可能です。EccubeExtensionクラスは同名のものがあるのでパスを確認するようにしてください。

  • src/Eccube/DependencyInjection/EccubeExtension.php
// SSL強制時は, httpsのみにアクセス制限する
$accessControl = [
  ['path' => '^/%eccube_admin_route%/login', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/%eccube_admin_route%/', 'roles' => 'ROLE_ADMIN'],
  ['path' => '^/mypage/login', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/mypage/withdraw_complete', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/mypage/change', 'roles' => 'IS_AUTHENTICATED_FULLY'],
  ['path' => '^/mypage/', 'roles' => 'ROLE_USER'],
];

ここの定義にログイン必須にするための処理を追加します。

// SSL強制時は, httpsのみにアクセス制限する
$accessControl = [
  ['path' => '^/%eccube_admin_route%/login', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/%eccube_admin_route%/', 'roles' => 'ROLE_ADMIN'],
  ['path' => '^/mypage/login', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/mypage/withdraw_complete', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'],
  ['path' => '^/mypage/change', 'roles' => 'IS_AUTHENTICATED_FULLY'],
  ['path' => '^/mypage/', 'roles' => 'ROLE_USER'],
  // 定義追加
  ['path' => '^/$', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'], // トップページはログイン不要
  ['path' => '^/entry', 'roles' => 'IS_AUTHENTICATED_ANONYMOUSLY'], // 会員登録ページはログイン不要
  ['path' => '^/', 'roles' => 'ROLE_USER'], // 全ページログイン必須
];

この処理を追加後、トップページと会員登録ページ以外にアクセスしてログイン画面が表示されれば設定完了です。

特定商取引やプライバシーポリシーなども除外する場合、上記に定義を追加するだけです。

パスの部分はURLを設定する様にしてください。

権限について

EC-CUBEではログインを行うのに権限が存在しており、

  • IS_AUTHENTICATED_ANONYMOUSLY : ログインなしでのアクセス可
  • IS_AUTHENTICATED_FULLY : 会員ログインが必要
  • ROLE_USER : 会員ログインが必要
  • ROLE_ADMIN : 管理者ログインが必要

というようになっています。先ほど設定したIS_AUTHENTICATED_ANONYMOUSLYなどは権限のことを表しています。

ROLE_USERIS_AUTHENTICATED_FULLYの違いですが、ログイン時に自動ログイン(REMEMBERME)にチェックをいれてログインしている時に動作が異なります。

  • ROLE_USER : 自動ログイン済の場合はログイン不要
  • IS_AUTHENTICATED_FULLY : 自動ログインされていてもログインが必要

という動作になります。EC-CUBEでは会員情報変更時のこの権限を利用しています。

以上で簡単に会員サイトを作る仕組みを用意しましたが、このままであれば会員登録されると誰でも見れるサイトになってしまいますので、会員登録された場合、管理画面側で本登録をさせるというカスタマイズを行えばよりクローズドなサイトが出来上がります。

その方法は後日説明します。