Rewish

CakePHPのAuthコンポーネントのパスワード暗号化を無効にする

CakePHPを使用してWebアプリを開発する際、簡単に認証機能を実装出来るAuthコンポーネントは、割と使用頻度の高いコンポーネントだと思います。

このAuthコンポーネント、デフォルトではpasswordフィールドに関連するPOSTデータが自動的に暗号化されますが、大人の事情やらなんやらで暗号化したくないってこともありますよね。

と言う訳で、Authコンポーネントのパスワード暗号化を無効にする方法を紹介します。

概要

暗号化を行っているhashPasswords()を、好きなclassで定義したhashPasswords()に置き換えて、POSTデータをそのまま返すようにする。

暗号化したくなったら、元のhashPasswords()を使うようにすればいいだけなので割と手軽。

今回は AppController でAuthコンポーネントの設定を行い、 Userモデル に定義したhashPasswords()を使うようにします。

サンプルコード

以下、CakePHP1.2 のサンプルコード。

app_controller.php

<?php
class AppController extends Controller {
	public $components = array('Auth');

	public function beforeFilter() {
		$this->Auth->authenticate = ClassRegistry::init('User');
	}
}

8行目は ClassRegistry::init(__CLASS__) として、同じclass内にhashPasswords()を定義しても良いと思います。この辺は好みやプロジェクトの規則に従う。

user.php

<?php
class User extends AppModel {
	public function hashPasswords($data) {
		return $data;
	}
}

まとめ

  • $this->Auth->authenticate = ClassRegistry::init(class名);
  • 指定したclass内にhashPasswords()を定義する
  • 戻すときは$this->Auth->authenticateを消す