PHPで開発をしていると、会員制サイトの作成などもあると思います。
IDとパスワードでログインするといった認証方法は皆さんも見たことがあるでしょう。
今回はそんな認証の仕組みを作成方法を以下の内容でお話していきます。
認証システムの作成方法
おすすめ認証ライブラリ
おすすめ認証フレームワーク
わかりやすく解説しますので、是非ご覧になってください。
認証の仕組みの作り方
PHPで認証の仕組みを作るにはいくつかの方法が考えられます。
まず、どんな方法を選択すればいいかをお話します。
認証システム自作をおすすめしない理由
検索すると、ライブラリやフレームワークを使わずに認証をする方法が沢山見つかります。
練習で作成するのは良いですが、実際のお仕事で使う事はおすすめできません。
様々な理由があるのですが、主な理由はセキュリティ問題です。
サーバーのコンテンツが書き換えられる、個人情報が抜かれるなど過去に様々なサイトやシステムでセキュリティ事故が発生してきます。
プログラム上級者ですら自作の認証システムを企業のシステムに組み込むことは積極的にはしないと思います。
自作で認証システムを作る事はとても高度な知識と時間が必要なのです。
ライブラリとフレームワークがおすすめ
自作がだめならどうしたら?
その答えは、ライブラリとフレームワークを使う事です。
様々なPHP認証用のライブラリやフレームワークが存在します。
次章から、おすすめのライブラリやフレームワークを紹介してきます。
認証が使えるライブラリ
今回おすすめするライブラリは「Sentinel」です。
ユーザー管理のためのライブラリでとても高機能です。
https://github.com/cartalyst/sentry
では、ローカル環境(vagrant+centOS)での使い方の説明をします。
テーブルの作成
今回のデータベースはmysqlを想定しています。
以下のコマンドでmysqlに入ります。
mysql -u root -p【パスワード】
まずデータベースを作成します。
CREATE DATABASE samurai CHARACTER SET=utf8;
続いて、先ほど作成したデータベースを選択します。
use samurai;
設定を反映させるために以下のコマンドを発行します。
SOURCE ./vendor/cartalyst/sentinel/schema/mysql-5.6+.sql;
ユーザーを作成します。
CREATE USER 'samuraiuser'@'localhost' IDENTIFIED BY '【パスワード】';
先ほど作成したユーザー(samuraiuser)にテーブルの操作権限を付与します。
GRANT SELECT, DELETE, INSERT, UPDATE, CREATE ON samurail.* TO 'samuraiuser'@'localhost';
テーブルの作成は以上です。
mysqlから抜けておきます。
インストール
Composerを利用してインストールします。
具体的には以下のコマンドをインストールしたいフォルダで実行します。
まず以下のコマンドを実行して必要ファイルのダウンロードです。
curl -sS https://getcomposer.org/installer | php
実行結果 All settings correct for using Composer Downloading... Composer (version 1.7.3) successfully installed to: /tmp/composer.phar Use it: php composer.phar
続いて以下のコマンドを実行してインストールをします。
composer require cartalyst/sentinel "^2.0"
vendorというフォルダが出来ました。
必要パッケージのインストール
まず、vendor/cartalyst/sentinel/composer.jsonの設定ファイルの以下部分を、
"require": { "php": ">=5.4.0", "cartalyst/support": "~1.0|~2.0", "illuminate/support": "~5.0" },
以下のように書き換え保存します。
"require": { "cartalyst/sentinel": "^2.0", "cartalyst/support": "~1.0|~2.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が使えるようになりました。
プログラムを作成
<?php // ①必要情報の読み込み use CartalystSentinelNativeFacadesSentinel; use IlluminateDatabaseCapsuleManager as Capsule; require_once ('/vendor/autoload.php'); $capsule = new Capsule; // ②データベースの設定 $capsule->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'samurai', 'username' => 'samuraiuser', 'password' => '【パスワード】', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', ]); $capsule->bootEloquent(); // ③ユーザー情報の設定 $samurai_user = [ 'email' => 'mail@samural.sejuku.net', 'password' => 'samuraipass' ]; // ④新規登録 $user_result = Sentinel::register($samurai_user); print_r($user_result);
①で必要情報を読み込みます。
②データベースの設定をします。
③新規登録するユーザー情報を配列に入れます。
④新規登録するためにregisterというsentinelの関数に情報を渡します。
これで、ユーザーの新規登録が完了し、ユーザー情報が表示されます。
簡単にできますので、是非試してみてください。
認証が使えるフレームワーク
PHPで使えるフレームワークには大抵認証機能がついています。
Laravel
Symfony
CakePHP
上記には全て認証機能があります。
フレームワークを使用する!と決まっている方の場合はまずフレームワークを選びましょう。
使用するフレームワークが決まってから、認証機能について考える方が効率がよいです。
使用するフレームワークは開発規模や目的によってよく考えましょう。
PHPのフレームワークの選択について迷う方は是非以下をご覧ください。
まとめ
本日はPHPの認証についてお話しました。
認証の仕組みを作る事が出来るようになると、またレベルアップです。
頑張って理解してくださいね。
それでは、また。