3月 112013
 

FuelPHPでSentryを使おう

こんばんは。ファガイです。個人的にSimpleAuthが好きになれなかったのでSentryという認証システムを使うことにしましたよっと。

Sentryは複数のフレームワークに対応する認証システムであり、composerでのインストールが可能。FuelPHP1.6からはcomposerに標準対応するということで、使ってみようかなと。

2015-04-22追記
※最新版は2.1系です。この記事は2.0系向けの記事となります。
最新の2.1系ではテーブル情報が変わっている模様なので、テーブルの作成はschemaフォルダmysql.sqlを利用してください。

Sentryの利点

  • 複数フレームワークに対応している(Laravel,FuelPHP,CodeIgniter等のフレームワークに対応)
  • フレームワーク無しでも動く
  • 何となく良さそうな気がする

Sentryは当初、FuelPHP用に作られていたのか不明だが、FuelPHPパッケージ版もある。けどcomposerでいいよね・・。

導入

まずは、composer.pharを用意しなくてはいけません。composerはhttp://getcomposer.org/composer.pharから取得が出来ます。

用意出来たらfuel/app内にcomposer.pharを入れます。
次に、DLをするためにcomposer.jsonを同じフォルダ内に用意します。これはSentryのgithubに載っています。(https://github.com/cartalyst/sentry)

composer.json

{
    "require": {
        "cartalyst/sentry": "2.0.*",
        "illuminate/database": "4.0.*",
        "ircmaxell/password-compat": "1.0.*"
    },
    "minimum-stability": "dev"
}

用意が終わったらインストールしましょう。

php composer.phar install

次はfuel/app/bootstrap.phpに2行を付け足す。
公式にAutoloader::register();以降に記述と書かれているため、その下に付け足しましょう。

// Enable composer based autoloading
require APPPATH.'vendor/autoload.php';

//Sentry用のエイリアス
class_alias('Cartalyst\Sentry\Facades\FuelPHP\Sentry', 'Sentry');

以上です。

これで基本はSentry自体の導入は完了。残りはテーブルを用意します。
ここからは一気に。

usersテーブル(usernameカラムは無くても良いです。カラムは自由に追加してOK)

追記
因みに、ninjauthにそのまま対応させるのであれば、こちらを使用。(とかいいつつninjauthのsentry用の設定が古いので結局書き換えは必要。first_name,last_nameが追加です)

作られたmigrationのphpにユニークキーを付け足す。

\DBUtil::create_index('users', 'email', 'users_email_unique', 'UNIQUE');

groupsテーブル(グループ管理用のテーブル。permissionsに制限情報をいれる)

作られたmigrationのphpにユニークキーを付け足す。

\DBUtil::create_index('groups', 'name', 'groups_name_unique', 'UNIQUE');

throttleテーブル(よくわからない)

users_groupsテーブル(ユーザがどのグループに入っているのか示すテーブル)

ここまでで、テーブルの用意はできました。

あとはphp oil refine migrateをすれば完了です。

余談

idにunsignedが付いたほうがいいのですが、付いてくれないので付けた。
oil/classes/generate/migration/actions.php 70行目あたり

$have_id or $field_str = "\t\t\t'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),".PHP_EOL . $field_str;

これを

$have_id or $field_str = "\t\t\t'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true),".PHP_EOL . $field_str;

こうですね。

面倒なのはSimpleAuthと同じだった・・・。そして2037年問題がある・・・。だけど使ってみる。

■追記
記事投稿後、約1日間ですがphp oil g migrationにてテーブルが作成出来なかったことを確認しました。って思ったらphp oil g modelの書き方とmigrationの書き方って違うんですね・・・。

Pocket

 Posted by at 12:07 AM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*