CodeIgniter 3.0で認証ライブラリIon Authを使う

CodeIgniterで現在最も使われていると思われる認証ライブラリIon Authをインストールします。

Ion Authのインストール

手動でのインストール

まず、CodeIgniter 3.0をインストールします。

そして、http://github.com/benedmunds/CodeIgniter-Ion-Auth/zipball/2 をダウンロードして展開します。

中身をCodeIgniterの対応するフォルダにコピーします。

Composerでのインストール

CodeIgniter 3.0をcodeigniter-composer-installerでインストールします。

$ composer create-project kenjis/codeigniter-composer-installer ci-ion-auth

Ion Authをインストールします。

$ cd ci-ion-auth
$ php bin/install.php ion-auth 2

ファイル名の修正

CodeIgniter 3.0の規約に合わせてクラスファイルのファイル名の先頭を大文字にします。

application/controllers/auth.php      -> application/controllers/Auth.php
application/models/ion_auth_model.php -> application/models/Ion_auth_model.php

テーブルの作成

まず、CodeIgniterのデータベース接続設定を済ませてください。

それから、application/sql/ion_auth.sqlでMySQLにIon Auth用のテーブルを作成します。

そのままでもいいのですが、わかりやすいようにテーブル名に接頭辞ia_を追加することにします。

--- a/application/sql/ion_auth.sql
+++ b/application/sql/ion_auth.sql
@@ -1,10 +1,10 @@
-DROP TABLE IF EXISTS `groups`;
+DROP TABLE IF EXISTS `ia_groups`;

 #
 # Table structure for table 'groups'
 #

-CREATE TABLE `groups` (
+CREATE TABLE `ia_groups` (
   `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
   `name` varchar(20) NOT NULL,
   `description` varchar(100) NOT NULL,
@@ -15,19 +15,19 @@ CREATE TABLE `groups` (
 # Dumping data for table 'groups'
 #

-INSERT INTO `groups` (`id`, `name`, `description`) VALUES
+INSERT INTO `ia_groups` (`id`, `name`, `description`) VALUES
      (1,'admin','Administrator'),
      (2,'members','General User');



-DROP TABLE IF EXISTS `users`;
+DROP TABLE IF EXISTS `ia_users`;

 #
 # Table structure for table 'users'
 #

-CREATE TABLE `users` (
+CREATE TABLE `ia_users` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `ip_address` varchar(15) NOT NULL,
   `username` varchar(100) NOT NULL,
@@ -53,17 +53,17 @@ CREATE TABLE `users` (
 # Dumping data for table 'users'
 #

-INSERT INTO `users` (`id`, `ip_address`, `username`, `password`, `salt`, `email`, `activation_code`, `forgotten_password_code`, `created_on`, `last_login`, `active`, `first_name`, `last_name`, `company`, `phone`) VALUES
+INSERT INTO `ia_users` (`id`, `ip_address`, `username`, `password`, `salt`, `email`, `activation_code`, `forgotten_password_code`, `created_on`, `last_login`, `active`, `first_name`, `last_name`, `company`, `phone`) VALUES
      ('1','127.0.0.1','administrator','$2a$07$SeBknntpZror9uyftVopmu61qg0ms8Qv1yV6FG.kQOSM.9QhmTo36','','admin@admin.com','',NULL,'1268889823','1268889823','1', 'Admin','istrator','ADMIN','0');


-DROP TABLE IF EXISTS `users_groups`;
+DROP TABLE IF EXISTS `ia_users_groups`;

 #
 # Table structure for table 'users_groups'
 #

-CREATE TABLE `users_groups` (
+CREATE TABLE `ia_users_groups` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `user_id` int(11) unsigned NOT NULL,
   `group_id` mediumint(8) unsigned NOT NULL,
@@ -71,22 +71,22 @@ CREATE TABLE `users_groups` (
   KEY `fk_users_groups_users1_idx` (`user_id`),
   KEY `fk_users_groups_groups1_idx` (`group_id`),
   CONSTRAINT `uc_users_groups` UNIQUE (`user_id`, `group_id`),
-  CONSTRAINT `fk_users_groups_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
-  CONSTRAINT `fk_users_groups_groups1` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
+  CONSTRAINT `fk_users_groups_users1` FOREIGN KEY (`user_id`) REFERENCES `ia_users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
+  CONSTRAINT `fk_users_groups_groups1` FOREIGN KEY (`group_id`) REFERENCES `ia_groups` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-INSERT INTO `users_groups` (`id`, `user_id`, `group_id`) VALUES
+INSERT INTO `ia_users_groups` (`id`, `user_id`, `group_id`) VALUES
      (1,1,1),
      (2,1,2);


-DROP TABLE IF EXISTS `login_attempts`;
+DROP TABLE IF EXISTS `ia_login_attempts`;

 #
 # Table structure for table 'login_attempts'
 #

-CREATE TABLE `login_attempts` (
+CREATE TABLE `ia_login_attempts` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `ip_address` varchar(15) NOT NULL,
   `login` varchar(100) NOT NULL,

テーブル名を変更したので設定ファイルでも変更します。

--- a/application/config/ion_auth.php
+++ b/application/config/ion_auth.php
@@ -27,10 +27,10 @@
 | -------------------------------------------------------------------------
 | Database table names.
 */
-$config['tables']['users']           = 'users';
-$config['tables']['groups']          = 'groups';
-$config['tables']['users_groups']    = 'users_groups';
-$config['tables']['login_attempts']  = 'login_attempts';
+$config['tables']['users']           = 'ia_users';
+$config['tables']['groups']          = 'ia_groups';
+$config['tables']['users_groups']    = 'ia_users_groups';
+$config['tables']['login_attempts']  = 'ia_login_attempts';

 /*
  | Users table column and Group table column you want to join WITH.

これで準備完了です。

サンプルページ

サンプルページが付属していますので、ブラウザでアクセスしてみます。

/auth/loginにアクセスします。

以下のデフォルトの管理者でログインします。

  ユーザ名:admin@admin.com
パスワード:password

ログインできると/にリダイレクトされます。

/authにアクセスするとユーザの一覧が表示されます。

「Edit」を押すとユーザの情報を変更できます。

/auth/logoutにアクセスするとログアウトします。

ドキュメント

Ion Authのドキュメントは以下にあります(英語)。

関連

Date: 2015/06/08

Tags: codeigniter, database, auth