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
------------------
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に上の記述をしなくてよいので楽。