CodeIgniter4の公式認証ライブラリCodeIgniter Shieldを使う
CodeIgniter4の公式認証ライブラリCodeIgniter Shieldを使ってみます。 CodeIgniter Shieldは現在ベータリリースです。
動作確認環境
- CodeIgniter 4.2.6
- CodeIgniter Shield dev-develop (67b14ad)
- PHP 8.0.21
- MySQL 5.7
- macOS 10.15.7
インストール
CodeIgniter4のインストール
$ composer create-project codeigniter4/appstarter ci4-shield-test
CodeIgniter Shieldのインストール
ComposerでCodeIgniter Shieldの最新開発版をインストールします。
$ cd ci4-shield-test/
$ composer require codeigniter4/shield:dev-develop
データベースの作成
CREATE DATABASE `ci_shield` DEFAULT CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON ci_shield.* TO dbuser@localhost IDENTIFIED BY 'dbpasswd';
設定
CodeIgniter4の設定
以下のように設定を日本仕様などに変更しておきます。
--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -37,7 +37,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $indexPage = 'index.php';
+ public $indexPage = '';
/**
* --------------------------------------------------------------------------
@@ -70,7 +70,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $defaultLocale = 'en';
+ public $defaultLocale = 'ja';
/**
* --------------------------------------------------------------------------
@@ -97,7 +97,7 @@ class App extends BaseConfig
*
* @var string[]
*/
- public $supportedLocales = ['en'];
+ public $supportedLocales = ['en', 'ja'];
/**
* --------------------------------------------------------------------------
@@ -109,7 +109,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $appTimezone = 'America/Chicago';
+ public $appTimezone = 'Asia/Tokyo';
/**
* --------------------------------------------------------------------------
.env
$ cp env .env
以下のように変更します。
CI_ENVIRONMENT = development
app.baseURL = 'http://localhost:8080/'
database.default.hostname = localhost
database.default.database = ci_shield
database.default.username = dbuser
database.default.password = dbpasswd
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
Shieldのセットアップ
セットアップコマンドを実行します。
$ php spark shield:setup
CodeIgniter v4.2.6 Command Line Tool - Server Time: 2022-09-07 15:02:01 UTC+09:00
Created: APPPATH/Config/Auth.php
Created: APPPATH/Config/AuthGroups.php
Updated: APPPATH/Controllers/BaseController.php
Updated: APPPATH/Config/Routes.php
Updated: We have updated file 'APPPATH/Config/Security.php' for security reasons.
Run `spark migrate --all` now? [y, n]: y
Running all new migrations...
Running: (CodeIgniter\Shield) 2020-12-28-223112_CodeIgniter\Shield\Database\Migrations\CreateAuthTables
Running: (CodeIgniter\Settings) 2021-07-04-041948_CodeIgniter\Settings\Database\Migrations\CreateSettingsTable
Running: (CodeIgniter\Settings) 2021-11-14-143905_CodeIgniter\Settings\Database\Migrations\AddContextColumn
Migrations complete.
設定とDBマイグレーションが完了しました。
以下のテーブルが作成されました。
$ php spark db:table --metadata
CodeIgniter v4.2.6 Command Line Tool - Server Time: 2022-09-07 15:08:43 UTC+09:00
Here is the list of your database tables:
[0] auth_groups_users
[1] auth_identities
[2] auth_logins
[3] auth_permissions_users
[4] auth_remember_tokens
[5] auth_token_logins
[6] migrations
[7] settings
[8] users
migrations
は CodeIgniter4 のデータベースマイグレーション用、settings
は codeigniter4/settings 用のテーブルです。
フィルター設定
ひとまず、トップページにフィルターを設定します。ログインが必要なように、session
フィルターを指定します。
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -35,7 +35,7 @@ $routes->set404Override();
// We get a performance increase by specifying the default
// route since we don't have to scan directories.
-$routes->get('/', 'Home::index');
+$routes->get('/', 'Home::index', ['filter' => 'session']);
service('auth')->routes($routes);
ルーティングの確認
ルートを確認します。
$ php spark routes
CodeIgniter v4.2.6 Command Line Tool - Server Time: 2022-09-07 15:05:02 UTC+09:00
+--------+-------------------------+--------------------------------------------------------------------+----------------+-----------------+
| Method | Route | Handler | Before Filters | After Filters |
+--------+-------------------------+--------------------------------------------------------------------+----------------+-----------------+
| GET | / | \App\Controllers\Home::index | session | session toolbar |
| GET | register | \CodeIgniter\Shield\Controllers\RegisterController::registerView | | toolbar |
| GET | login | \CodeIgniter\Shield\Controllers\LoginController::loginView | | toolbar |
| GET | login/magic-link | \CodeIgniter\Shield\Controllers\MagicLinkController::loginView | | toolbar |
| GET | login/verify-magic-link | \CodeIgniter\Shield\Controllers\MagicLinkController::verify | | toolbar |
| GET | logout | \CodeIgniter\Shield\Controllers\LoginController::logoutAction | | toolbar |
| GET | auth/a/show | \CodeIgniter\Shield\Controllers\ActionController::show | | toolbar |
| POST | register | \CodeIgniter\Shield\Controllers\RegisterController::registerAction | | toolbar |
| POST | login | \CodeIgniter\Shield\Controllers\LoginController::loginAction | | toolbar |
| POST | login/magic-link | \CodeIgniter\Shield\Controllers\MagicLinkController::loginAction | | toolbar |
| POST | auth/a/handle | \CodeIgniter\Shield\Controllers\ActionController::handle | | toolbar |
| POST | auth/a/verify | \CodeIgniter\Shield\Controllers\ActionController::verify | | toolbar |
| CLI | ci(.*) | \CodeIgniter\CLI\CommandRunner::index/$1 | | |
+--------+-------------------------+--------------------------------------------------------------------+----------------+-----------------+
Webサーバーの起動
$ php spark serve
ユーザー登録
ユーザー登録ページ
http://localhost:8080/register にアクセスします。
以下で登録します。
メール:admin@example.jp
ユーザー名:admin
パスワード:passw0rd!
登録が完了すると、ログイン状態となり、トップページにリダイレクトされます。
http://localhost:8080/logout にアクセスするとログアウトします。
ログイン
ログインページ
http://localhost:8080/ にブラウザでアクセスします。
http://localhost:8080/login にリダイレクトされました。
先ほど作成したユーザーでログインします。
メール:admin@example.jp
パスワード:passw0rd!
ログインが成功すると、トップページにリダイレクトされます。
右下のアイコンからデバッグツールバーを表示させて、Authデータを見ることで、ログイン状態であることがわかります。
http://localhost:8080/logout にアクセスするとログアウトします。
参考
Date: 2022/09/08