CakePHP2.xでScaffoldingに(Authより)簡単な認証を実装する方法
CakePHPでのシステム開発時において、一時的にデータベースの内容を誰かに確認してほしいときがあります。 そんなとき、Scaffoldingを使えば楽に実現できますよね。
ただ、もちろん認証をかけることは必要だけど、かといって一時的に見てもらうページのためだけにAuthコンポーネントを使うのも面倒……。
そんなときに便利な、簡易的な認証をかける方法について書きます。 (あくまで簡易的なので、使用は自己責任で)
認証の流れ
認証は以下の流れで行ないます。
- beforeFilter()で認証済みかどうか判別する
- 認証済みでない場合、ログイン用のダイアログを表示する
- 入力されたパスワードが一致した場合は認証し、一致しない場合は2に戻る
必要なファイル
認証を実装するために必要なファイルは以下の2つだけです。
- /app/Controller/ScaffoldsController.php
- /app/View/Scaffolds/login.ctp
1. ScaffoldsController.php
まず、以下の内容のScaffoldsController.phpを作成します。
self::PASSWORDは適宜変更してください。
App::uses('AppController', 'Controller');
class ScaffoldsController extends AppController {
public $scaffold;
public $components = array('Session');
/* パスワード */
const PASSWORD = '1234';
public function beforeFilter() {
/* 管理権限がある場合 */
if ($this->Session->read('is_admin')) {
return;
}
/* ログインまたは認証時以外の場合 */
if ( ($this->action != 'login') && ($this->action != 'auth')) {
$this->redirect('login');
exit();
}
}
public function login() {
$this->layout = false;
}
public function auth($password = null) {
if ($password == self::PASSWORD) {
$this->Session->write('is_admin', true);
$this->redirect('index');
} else {
$this->redirect('login');
}
exit();
}
}
2. login.ctp
次に、login.ctpを作成します。
<script>
window.onload = function() {
location.href = './auth/' + prompt('パスワードを入力してください。');
}
</script>
おわりに
以上で、簡易的な認証を実現できます。 通常のJavaScriptのみの認証と違い、パスワードが流出する恐れがないので比較的安全な方法だと思います。
一時的なページの認証等であれば、この程度の簡単なものでもいいのではないでしょうか。