WEB/システム/IT技術ブログ

FuelPHPの認証機能「Authパッケージ」を利用してみる

FuelPHPのAuthパッケージで会員管理やログイン画面などの作成に便利な認証機能を使ってみました。

今回はAuthパッケージの中でも基本的なドライバセット「Simpleauth」を利用してみます。

なお、今回の確認環境は以下の通りです。

  • PHP 5.4
  • FuelPHP 1.7

※FuelPHPはDB接続設定済みとします

設定ファイルなどの準備

まずAuthパッケージを読み込むため「…/fuel/app/config/config.php」ファイルを開き、以下の項目に「auth」を追加します。

'always_load' => array(
	'packages' => array(
		'auth',
	),
),

次に以下のパッケージフォルダ内のファイルを、アプリケーション設定フォルダにコピーします。

.../fuel/packages/auto/config/auth.php ⇒ .../fuel/app/config/auth.php
.../fuel/packages/auto/config/simpleauth.php ⇒ .../fuel/app/config/simpleauth.php

コピーした「auth.php」をテキストエディタで開き「salt」を任意の文字列に書き換えます。

'salt' => 'xxxxxxxxxxxxxxxxxxxx',

同様に「simpleauth.php」を開き「login_hash_salt」を任意の文字列に書き換えます。

'login_hash_salt' => 'xxxxxxxxxxxxxxxxxxxx',

こちらファイルで細かい設定が可能ですが、基本的に使用する分にはデフォルトでも問題ないので、ここでは詳細は割愛します。

認証に必要なDBを用意する

認証に必要なテーブルなどはoilコマンドで一発で用意できます。
ここがFuelPHPのいいところですね。

php oil refine migrate --packages=auth

コマンドラインより上記のコマンドを実行すると以下の6つのテーブルがDBに自動生成されます

users
users_clients
users_providers
users_scopes
users_sessions	
users_sessionscopes

さらに続けて以下のコマンドで初期ユーザやテストユーザを追加することができます。
いちいち画面を作らなくてもいいなんて楽ちんですね。

php oil console
>>> Auth::create_user('username', 'password', 'test@helog.jp');
1
>>> exit;

これでDBの用意は完了です。

認証機能を実装する

今回は画面の構築は省き、処理に注目して解説します。

例えばコントローラ内で、以下のようにしてログイン画面などのフォームからPOSTで受けたユーザ名、パスワードでログイン処理を行います。

if (Input::post()) {
	if (Auth::login(Input::post('username'), Input::post('password'))){
		// ログイン成功
	}else{
		// ログイン失敗
	}
}

ログインしているかどうかのチェックは以下のようにして判定します。

if(Auth::check()){
	// ログイン済
}else{
	// 未認証⇒ログインが必要
}

ログアウト処理です

Auth::logout();

いやぁものすごく簡単でシンプルですね。
この部分を他のフレームワークで構築する際に、どれほど泣かされたことか。。。

無限ループの注意

SNSや管理画面など、認証状態を保持したい場合にはコントローラ内「before()」に認証チェック処理を置くと便利です。
また、未認証の場合にはログイン画面へリダイレクトさせるべきでしょう。

その時に注意するべき点は、ログイン画面のbefore内で認証チェックを働かせてしまうと、ログイン画面へのリダイレクトが繰り返され、結果として無限ループに陥ってしまうので気を付けなければいけません。

public function before(){
	parent::before();

	if(strcmp(Request::active()->action, 'login') !== 0 && !Auth::check()){
		Response::redirect('auth/login');
	}
}

こちらは無限ループを回避する1つの例です。

当然といえば当然ですが、ログイン画面へ飛ばす条件としてログイン画面は対象にしてはいけないということですね。

以上、FuelPHPでは少ないコストで認証のしくみを組込むことができます。すばらしいですね。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives