認証に関する様々な機能を提供してくれる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';
- MySQLを抜ける
quit
テストコードを作成
動作テストをするためのコードを用意します。プロジェクト用のフォルダーにsrcフォルダーを作成して、その中に tuto.php というファイルを作成して、以下のコードを入力してください。
<?php // Import the necessary classes use Cartalyst\Sentinel\Native\Facades\Sentinel; use Illuminate\Database\Capsule\Manager as Capsule; // Include the composer autoload file require __DIR__.'/../vendor/autoload.php'; // Setup a new Eloquent Capsule instance $capsule = new Capsule; $capsule->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'sentinel', // データベース名を変更していたら合わせて変更 'username' => 'xxxx', // xxxxを、データベースのユーザー名に変更 'password' => 'xxxxxx', // 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を参照して、使いたい機能を利用しましょう。