-
Notifications
You must be signed in to change notification settings - Fork 130
フロント認証
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' => 'User'
)
);
このコードは、/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);