CodeIgniter 認証機能を追加する

codeigniter には標準で認証機能がついていないのでその実装。

・作成するファイル
views/login.php → ログイン画面
controllers/login.php → 入力された認証情報と接続元URLをsession情報にセットし、authに渡す。
controllers/auth.php → 認証処理を行う。
controllers/任意のファイル → constructですでに認証済みかどうかを判定し、NGだったらログイン画面に飛ばす。

・使用するsession情報
'username' → ユーザ名
'password' → パスワード
'access_uri' → 認証後に接続するURL
'login_status' → すでに認証済みかどうかのフラグ


#vi config/config.php
------------------
$config['encryption_key'] = '32文字の文字列'
------------------
※codigniterでsessionを使うために乱数をセットする


# vi controllers/auth.php
------------------
load->library('session');
$this->load->helper('url');

if( $this->session->userdata('username') == 'ユーザ名' &&
$this->session->userdata('password') == 'パスワード' ) {
$this->session->set_userdata('auth_status', 'TRUE');
redirect( $this->session->userdata('access_uri') );
} else {
redirect(login);
}
}
}
------------------
※ID、パスワードをDBで管理したいときはmodelを書くなどすること。


# vi controllers/login.php
------------------
load->view('login');
}

function login_exe(){
$this->load->helper('url');
$this->load->library('session');

$this->session->set_userdata('username', $this->input->post('username'));
$this->session->set_userdata('password', $this->input->post('password'));

redirect('auth');
}

}
------------------


# vi views/login.php
------------------




login

load->helper('form');

echo form_open('login/login_exe');

echo form_label('username: ', 'username');
$data = array('name' => 'username', 'id' => 'username', 'size' => '25');
echo form_input($data);
echo "
";

echo form_label('password: ', 'password');
$data = array('name' => 'password', 'id' => 'password', 'size' => '25');
echo form_input($data);
echo "
";

echo form_submit('submit', 'login');
echo "
";

echo form_close();
?>



------------------


# vi "認証を追加したいcontroller"
------------------
function __construct() {
parent::__construct();

$this->load->library('session');
$this->load->helper('url');

if( $this->session->userdata('auth_status') !== "TRUE" ) {
$this->session->set_userdata('access_uri', $this->uri->uri_string());
redirect(auth);
}
}
------------------

CI_controller を extend して上記処理を追加すれば、いちいちcontrollerに上の記述をしなくてよいので楽。