フロント認証

baserCMSでは、フロントサイドの認証機能のAPIを提供しており、比較的簡単に、ログイン認証が必要なコンテンツの作成が行えます。
今回は、フロントサイド全てのコンテンツに認証をかける前提にて開発例をご紹介します。

ログインページの準備とログイングループ、ユーザーの追加

基本設定

フロント認証の基本設定は、baserCMSが提供する設定ファイルで行います。
/app/Config/setting.php に次のコードを記述します。


<?php
$config['BcAuthPrefix'] = array(
    'front' => array(
        // 認証名
        'name'            => 'フロント',
        // ログイン完了後にリダイレクトするURL
        'loginRedirect'    => '/',
        // ユーザー管理に利用するモデル
        'userModel'        => 'User',
        // ログイン画面のURL
        'loginAction'    => '/users/login',
        // ログアウトを実行するURL
        'logoutAction'    => '/users/logout',
        // ツールバーの利用可否
        'toolbar'        => true,
        // セッションキー(デフォルトは管理システムと同じキー)
        // セッションキーは任意の文字列を利用してください。利用するサイト名やプロジェクト名が良いのではないかと思います。
        'sessionKey'    => 'ProjectName'
    )
);

このコードは、/lib/Baser/Config/setting.php に記載されており、そのファイルに記載されている設定は、全て、 /app/Config/setting.php で上書き可能です。

認証グループ設定

次に管理システムにログインし、フロントサイドにログインする事ができるユーザーグループを作成します。
基本設定を行った事で、ユーザーグループの追加画面に、「認証プレフィックス設定」という項目が表示されていますので、「フロント」にチェックを入れて保存します。
 

ユーザー追加

認証グループ設定で追加したユーザーグループに所属するユーザーを作成します。
 

ログインページの確認

http://[baserCMSの設置場所]/users/login にアクセスし、ログインページが表示され、先ほど追加したユーザーでログインができる事を確認します。
 

認証チェックとリジェクト処理

これまでの作業でログインページの準備とログイン処理は実装が完了しましたが、フロントサイドにおいて認証をかけているわけでないので、ログインせずともフロントサイドにアクセスできてしまいます。

次に、 AppController を利用して、認証チェックと非認証時のリジェクト処理を記述します。
今回は、AppController::beforeFilter() において、認証が完了しているかをチェックし、完了していない場合は、ログインページにリダイレクトする前提として次のようなコードを /app/Controller/AppController.php に記述します。


<?php
App::uses('BcAppController', 'Controller');
class AppController extends BcAppController {
    public function beforeFilter() {
        parent::beforeFilter();
        if(BcUtil::isAdminSystem()) {
            return;
        }
        // フィードの場合はスルー(管理画面のダッシュボードで読み込まれているため)
        if(preg_match('/^feed\//', $this->request->url)) {
            return;
        }
        // 認証クラスがない場合はスルー
        if(!isset($this->BcAuth)) {
            return;
        }
        // ログイン画面の場合はスルー
        if(('/' . $this->request->url) == $this->BcAuth->loginAction) {
            return;
        }
        // パスワードリセット画面の場合はスルー
        if(($this->request->url) == 'users/reset_password') {
            return;
        }
        // リクエストアクションの場合はスルー
        if($this->request->is('requested')) {
            return;
        }
        // 認証されていない場合はログイン画面にリダイレクト
        if(!$this->BcAuth->user()) {
            $this->redirect($this->BcAuth->loginAction);
        }
    }
}

これで、フロントサイドにアクセスした際、ログインが完了していないとログインページにリダイレクトする仕組みが出来上がりました。
コンテンツ毎に、認証をかけたいような場合には、 $this->request->url に現在のURL情報が入ってきますので、それを元に、振り分け処理を記述しましょう。
 

キャッシュの設定

固定ページはビューキャッシュを利用する為、キャッシュのチェックをオフにしないと、認証がかかっていてもキャッシュを利用して表示されてしまいます。キャッシュをオフにするには、 /app/Config/install.php にて、キャッシュをオフに設定します。

Configure::write('Cache.check', false);
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.