CodeIgniter 簡易ログイン
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[CodeIgniter]]
CodeIgniter2.0で簡易ログイン機能を実装する。
管理者画面とか、ログインするユーザーが一人しかいない場合...
#contents
* 参考 [#c7c5a346]
** 多機能なユーザー管理機能を必要とする場合 [#m9b00524]
CodeIgniterのユーザ認証ライブラリ「[[Tank_Auth]]」を利用...
** 多機能なユーザー管理機能を必要としない場合 [#bce95608]
Controllerを拡張して、ログインチェック機能を追加する。
- CodeIgniterでユーザー認証
http://php-sql-gdgd.jugem.jp/?eid=56
>ControllerをextendしたMY_Controllerを使う方法で実装
* データベース [#rfa88275]
- MySQL 5.0
- InnoDBエンジン
を使用。
-[admin]テーブルを用意する。
| カラム名 | 型 | 内容 |h
| id | int | auto_increment 連番|
| username | varchar(255) | ユーザー名 |
| password | varchar(255) | パスワード md5()等で暗号化し...
#code(sql){{
CREATE TABLE IF NOT EXISTS `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
}}
* ライブラリ [#wa03db48]
ログイン認証用ライブラリを用意する。
CodeIgniter2.0用(CodeIgniter1.xは、コントローラークラス...
-ファイル名
MY_Controller.php
-パス
/application/core/MY_Controller.php
-ファイル内容(文字コードは「UTF-8N」)
#code(php){{
<?php if (!defined('BASEPATH')) exit('No direct script ac...
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->helper('url');
//login check
if($this->session->userdata('is_login') != TRUE)
{
// next = redirect page
if(!$this->session->userdata('next'))
{
$this->session->set_userdata(array('next'=>$this->uri...
}
redirect('auth/login/'.$this->session->userdata('next'...
}
}
}
?>
}}
* コントローラー [#gb4fb35e]
ログイン認証用のコントローラーを用意する。
-ファイル名
auth.php
-パス
/application/controllers/auth.php
-ファイル内容
#code(php){{
<?php
class Auth extends CI_Controller
{
private $user_table = 'admin';
public function __construct()
{
parent::__construct();
$this->load->database();
$this->load->library(array('session', 'form_validation'...
$this->load->helper(array('form', 'url'));
}
public function index()
{
$data['username'] = "";
$data['password'] = "";
$data['next'] = "";
$this->load->view('login_form', $data);
}
public function login($next='')
{
// after login
if($this->session->userdata('is_login') == TRUE) {
redirect($next);
}
// before login
$username = $this->input->post('username');
$password = $this->input->post('password');
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$next = $this->input->post('next'); // hidden value fr...
}
// validation rules
$this->form_validation->set_rules('username', 'ユーザー...
$this->form_validation->set_rules('password', 'パスワー...
// validation check
if ($this->form_validation->run() == TRUE) {
//login check
if ($this->_db_check($username, $password)) {
//login OK
$this->session->sess_destroy();
$this->session->sess_create();
$this->session->set_userdata(array('is_login' => TRUE...
$this->session->set_userdata(array('username' => $use...
redirect($next);
}
}
// when first access OR validation error OR login NG
$data['username'] = $username;
$data['password'] = $password;
$data['next'] = $next;
$this->load->view('login_form', $data);
}
public function logout()
{
$this->session->sess_destroy();
redirect('');
}
private function _db_check($username='', $password='')
{
$this->db->where('username', $username);
$query = $this->db->get($this->user_table);
if (0 < $query->num_rows()) {
$row = $query->row();
if($row->password == md5($password)) {
return TRUE;
}
}
return FALSE;
}
}
?>
}}
CodeIgniter3.0になったら、以下のメソッドは使えないみたい...
$this->session->sess_destroy();
$this->session->sess_create();
代わりに、
$this->session->flashdata();
を使うみたいです。
(参考) https://codeigniter.com/user_guide/libraries/ses...
* ビュー [#l8e8fb2a]
ログイン認証用のビューを用意する。
-ファイル名
login_form.php
-パス
/application/views/login_form.php
-ファイル内容
#code(php){{
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; chars...
<title>ログイン認証</title>
</head>
<body>
<p>ログインしてください。</p>
<!--エラーメッセージ-->
<font color="red"><?php echo validation_errors(); ?></font>
<?php echo form_open('auth/login'); ?>
<dl>
<dt>ユーザ名</dt>
<dd><input type="text" name="username" value="<?php ech...
<dt>パスワード</dt>
<dd><input type="password" name="password" value="<?php...
</dl>
<!--ログイン後に移動するページ-->
<input type="hidden" name="next" value="<?php echo $next;...
<input type="submit" value="ログイン">
</form>
</body>
</html>
}}
*ログイン認証の使い方 [#g1ccd6f9]
ログイン認証を必要とするページのコントローラーには、MY_Co...
** 設置例 [#vaca1757]
管理者画面の「admin」ページの設置例
-ファイル名
admin.php
-パス
/application/controllers/admin.php
-ファイル内容
#code(php){{
<?php
class Admin extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
function index()
{
echo "login OK";
}
}
?>
}}
通常のコントローラーは、CI_Controllerクラスを継承して作る...
ログイン認証を行うコントローラーでは、MY_Controllerクラス...
オリジナルのライブラリ「MY_Controller.php」でログインチェ...
-ログイン前なら、ログインフォームに移動する。
-ログイン後なら、admin.php(管理者画面)のindex()を表示す...
** MD5 [#ybf0e555]
データベースに保存するパスワードは、MD5(ハッシュ関数)で...
phpMyAdminで直接データを追加する場合は、MD5のツールを使う...
(例)[[MD5ハッシュ計算ツール - phpspot>http://phpspot.ne...
終了行:
[[CodeIgniter]]
CodeIgniter2.0で簡易ログイン機能を実装する。
管理者画面とか、ログインするユーザーが一人しかいない場合...
#contents
* 参考 [#c7c5a346]
** 多機能なユーザー管理機能を必要とする場合 [#m9b00524]
CodeIgniterのユーザ認証ライブラリ「[[Tank_Auth]]」を利用...
** 多機能なユーザー管理機能を必要としない場合 [#bce95608]
Controllerを拡張して、ログインチェック機能を追加する。
- CodeIgniterでユーザー認証
http://php-sql-gdgd.jugem.jp/?eid=56
>ControllerをextendしたMY_Controllerを使う方法で実装
* データベース [#rfa88275]
- MySQL 5.0
- InnoDBエンジン
を使用。
-[admin]テーブルを用意する。
| カラム名 | 型 | 内容 |h
| id | int | auto_increment 連番|
| username | varchar(255) | ユーザー名 |
| password | varchar(255) | パスワード md5()等で暗号化し...
#code(sql){{
CREATE TABLE IF NOT EXISTS `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
}}
* ライブラリ [#wa03db48]
ログイン認証用ライブラリを用意する。
CodeIgniter2.0用(CodeIgniter1.xは、コントローラークラス...
-ファイル名
MY_Controller.php
-パス
/application/core/MY_Controller.php
-ファイル内容(文字コードは「UTF-8N」)
#code(php){{
<?php if (!defined('BASEPATH')) exit('No direct script ac...
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->helper('url');
//login check
if($this->session->userdata('is_login') != TRUE)
{
// next = redirect page
if(!$this->session->userdata('next'))
{
$this->session->set_userdata(array('next'=>$this->uri...
}
redirect('auth/login/'.$this->session->userdata('next'...
}
}
}
?>
}}
* コントローラー [#gb4fb35e]
ログイン認証用のコントローラーを用意する。
-ファイル名
auth.php
-パス
/application/controllers/auth.php
-ファイル内容
#code(php){{
<?php
class Auth extends CI_Controller
{
private $user_table = 'admin';
public function __construct()
{
parent::__construct();
$this->load->database();
$this->load->library(array('session', 'form_validation'...
$this->load->helper(array('form', 'url'));
}
public function index()
{
$data['username'] = "";
$data['password'] = "";
$data['next'] = "";
$this->load->view('login_form', $data);
}
public function login($next='')
{
// after login
if($this->session->userdata('is_login') == TRUE) {
redirect($next);
}
// before login
$username = $this->input->post('username');
$password = $this->input->post('password');
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$next = $this->input->post('next'); // hidden value fr...
}
// validation rules
$this->form_validation->set_rules('username', 'ユーザー...
$this->form_validation->set_rules('password', 'パスワー...
// validation check
if ($this->form_validation->run() == TRUE) {
//login check
if ($this->_db_check($username, $password)) {
//login OK
$this->session->sess_destroy();
$this->session->sess_create();
$this->session->set_userdata(array('is_login' => TRUE...
$this->session->set_userdata(array('username' => $use...
redirect($next);
}
}
// when first access OR validation error OR login NG
$data['username'] = $username;
$data['password'] = $password;
$data['next'] = $next;
$this->load->view('login_form', $data);
}
public function logout()
{
$this->session->sess_destroy();
redirect('');
}
private function _db_check($username='', $password='')
{
$this->db->where('username', $username);
$query = $this->db->get($this->user_table);
if (0 < $query->num_rows()) {
$row = $query->row();
if($row->password == md5($password)) {
return TRUE;
}
}
return FALSE;
}
}
?>
}}
CodeIgniter3.0になったら、以下のメソッドは使えないみたい...
$this->session->sess_destroy();
$this->session->sess_create();
代わりに、
$this->session->flashdata();
を使うみたいです。
(参考) https://codeigniter.com/user_guide/libraries/ses...
* ビュー [#l8e8fb2a]
ログイン認証用のビューを用意する。
-ファイル名
login_form.php
-パス
/application/views/login_form.php
-ファイル内容
#code(php){{
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; chars...
<title>ログイン認証</title>
</head>
<body>
<p>ログインしてください。</p>
<!--エラーメッセージ-->
<font color="red"><?php echo validation_errors(); ?></font>
<?php echo form_open('auth/login'); ?>
<dl>
<dt>ユーザ名</dt>
<dd><input type="text" name="username" value="<?php ech...
<dt>パスワード</dt>
<dd><input type="password" name="password" value="<?php...
</dl>
<!--ログイン後に移動するページ-->
<input type="hidden" name="next" value="<?php echo $next;...
<input type="submit" value="ログイン">
</form>
</body>
</html>
}}
*ログイン認証の使い方 [#g1ccd6f9]
ログイン認証を必要とするページのコントローラーには、MY_Co...
** 設置例 [#vaca1757]
管理者画面の「admin」ページの設置例
-ファイル名
admin.php
-パス
/application/controllers/admin.php
-ファイル内容
#code(php){{
<?php
class Admin extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
function index()
{
echo "login OK";
}
}
?>
}}
通常のコントローラーは、CI_Controllerクラスを継承して作る...
ログイン認証を行うコントローラーでは、MY_Controllerクラス...
オリジナルのライブラリ「MY_Controller.php」でログインチェ...
-ログイン前なら、ログインフォームに移動する。
-ログイン後なら、admin.php(管理者画面)のindex()を表示す...
** MD5 [#ybf0e555]
データベースに保存するパスワードは、MD5(ハッシュ関数)で...
phpMyAdminで直接データを追加する場合は、MD5のツールを使う...
(例)[[MD5ハッシュ計算ツール - phpspot>http://phpspot.ne...
ページ名: