今回の認証クラスでは、DBを使って認証処理を行っています。
サンプルソースは以下になります。
説明を日本語で書くと、余計にわかりづらいくなってしまいましのたで、
コードとコメントを見て理解していただけたらと思います。
Zend_Loader::loadClass('Zend_DB_Table_Abstract');
Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
Zend_Loader::loadClass('Zend_Auth_Storage_Session');
class authModel
{
private $_authStorage;
public function __construct()
{
$config = new Zend_Config_Ini('config/system.ini', 'default');
// ログイン情報を格納するセッションを指定
$this->_authStorage
= new Zend_Auth_Storage_Session($config->session);
}
public function login($post)
{
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('Accounts')
->setIdentityColumn('login_id') // IDカラムを指定
->setCredentialColumn('password'); // 認証用カラムを指定
// 上記で指定したカラムに、認証したい値を設定
$authAdapter->setIdentity($post['login_id'])
->setCredential($post['password']);
// 認証実行
$result = $authAdapter->authenticate();
if ($result->isValid()){
// 認証OKとなったレコードから、login_idとstatusを取りだす
$row = $authAdapter->getResultRowObject(array(login_id, status));
// ログイン情報格納用セッションに取得した情報を設定する
$this->_authStorage->write($row);
}
return $result;
}
public function logout()
{
$this->_authStorage->clear();
}
public function isAuth()
{
return (isset($this->get()->login_id) && isset($this->get()->status));
}
public function get()
{
return $this->_authStorage->read();
}
}
ログイン情報を設定するセッションに、デフォルト(Zend_Auth)を利用したり、
セッションに設定する情報が、認証に利用したID(上記だとlogin_id)だけでいい場合は、
より簡潔に記述することができます。
デフォルトのセッションを利用する場合は、コンストラクタ内の処理は必要ありません。
セッションに設定する情報が、認証に利用したIDのみでいい場合は、
認証処理を実行してOKだった場合に、自動的に設定されていますので、
わざわざ設定する処理を記述する必要はありません。