認証に関する様々な機能を提供してくれるPHPのライブラリ、CARTALYSTの「SENTINEL」をmacのローカル環境で使ってみます。
概要
以下、公式サイトのINTRODUCTIONの意訳。
モダンでフレームワークを選ばないAuthorization(認可)やAuthentication(認証)のパッケージです。権限設定、独自のハッシュアルゴリズム、そして追加のセキュリティ機能を持ちます。
パッケージは、FIG(Framework Interop Group)によるPSR-4(PHP Standard Recommendations - Autoloading Standard)に対応しており、PHPコード間で柔軟な制御ができます。
動作環境はPHP 5.4以上が必要で、オプションとしてフレームワーク統合を単純化するために、Laravel 5 FacadeとサービスProviderがバンドルされています。
インストール
Composerを利用するのが最も簡単です。
macなど、Composerがグローバルにインストールされている場合は、ターミナルで組み込みたいプロジェクトフォルダーに移動して、以下でインストールできます。
composer require cartalyst/sentinel "^2.0"
レンタルサーバー上など、composer.pharをダウンロードして利用する場合は以下の通りです。すでにcomposer.pharをダウンロード済みであれば、2行目だけで大丈夫です。
curl -sS https://getcomposer.org/installer | php
php composer.phar require cartalyst/sentinel "^2.0"
vendor/autoload.php ファイルを require することで、パッケージが自動的に読み込まれます(自動的に読み込む機能がPSR-4によるものです)
Nativeで利用する
今回はSlimPHPと組み合わせたいので、Nativeでセットアップします。
Sentinelは illuminate/database など、幾つかのライブラリを利用します。それらをインストールします。
- vendor/cartalyst/sentinel/composer.json に開発用の設定があるので、それを参考にしました
{
"require": {
"cartalyst/sentinel": "^2.0",
"cartalyst/support": "~1.0",
"illuminate/database": "~5.0",
"illuminate/events": "^5.2",
"illuminate/http": "~5.0",
"illuminate/support": "~5.0",
"php": ">=5.4.0",
"paragonie/random_compat": "~1.1"
}
}
- 上書き保存する
- ターミナルのプロジェクトフォルダーから以下を実行して必要なコンポーネントをインストール
composer update
データベースの準備
Sentinel用のデータベースとテーブル、操作するユーザーを作成しましょう。
- MySQLサーバーが起動していなければ以下で開始する
mysql.server start
- ターミナルで、プロジェクトフォルダーから以下を実行
mysql -u データベースの作成権限のあるユーザー -p
- パスワードの要求があるので入力
- MySQLにログインしたら、以下でデータベースを作成
CREATE DATABASE IF NOT EXISTS sentinel CHARACTER SET=utf8;
use sentinel;
SOURCE ./vendor/cartalyst/sentinel/schema/mysql-5.6+.sql;
- Sentinelを操作するためのユーザーを作成する。以下で、localhostのみ有効なsentineluserという名前のユーザーを作成する
CREATE USER 'sentineluser'@'localhost' IDENTIFIED BY '設定したいパスワード';
- アクセス用のユーザーにデータベース上でテーブルの操作権限を与える
GRANT SELECT,DELETE,INSERT,UPDATE,CREATE ON sentinel.* TO 'sentineluser'@'localhost';
quit
テストコードを作成
動作テストをするためのコードを用意します。プロジェクト用のフォルダーにsrcフォルダーを作成して、その中に tuto.php というファイルを作成して、以下のコードを入力してください。
<?php
use Cartalyst\Sentinel\Native\Facades\Sentinel;
use Illuminate\Database\Capsule\Manager as Capsule;
require __DIR__.'/../vendor/autoload.php';
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'sentinel',
'username' => 'xxxx',
'password' => 'xxxxxx',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
]);
$capsule->bootEloquent();
$credentials = [
'email' => 'email@example.com',
'password' => 'pass'
];
$user = Sentinel::getUserRepository()->findByCredentials($credentials);
if (is_null($user)) {
$user = Sentinel::register($credentials);
print_r($user);
}
else {
$user->delete();
echo "user deleted".PHP_EOL;
}
?>
- 16行目のusernameの'xxxx'と、17行目のpasswordの後ろの'xxxxxx'を、実際に作成したMySQLのユーザー名(今回は sentineluser )とパスワードに書き換える
- メールのテストをする場合は、26行目と27行目のユーザー情報も変更する。今回のチュートリアルは変更しなくても動作する
以上が出来たら上書き保存をして、ターミナルから以下で実行します。
php ./src/tuto.php
初めて実行すると、ユーザーが未登録なので、指定のユーザーを登録して、登録情報を画面に表示します。
もう一度実行すると、ユーザーが存在するので、ユーザーを削除して、画面に「user deleted」と表示します。
何も表示されない場合は、データベースのユーザー名やパスワードが間違えている可能性があるので見直してください。
まとめ
以下をやりました。
- Sentinelのインストール
- Sentinel用のデータベースの準備
- Sentinelを使ったユーザー登録と削除の動作チェック
あとは、公式ページの USAGE に掲載されているリファレンスやExampleを参照して、使いたい機能を利用しましょう。