まだ未完成。
とりあえず、自分用にメモです。
FuelPHP 1.6 で Ormauth 使って oil generate admin... でログインでコケる問題に暫定対処
FuelPHP 1.6 がリリースされてます。
OrmAuthが使える様になったとのことなので使ってみます。
oil g admin ...すると生成されるファイルはSimpleauth用っぽいので、OrmAuthを使ってかつ、出来るだけ oil で何とかしたい場合は、ちょっとだけ変更してやつ必要があるっぽいです。
OrmAuthを導入
-
まず、PKGPATH/auth/config/auth.php を APPPATH/config/auth.php にコピー
-
driver を Ormauth に変更
<?php
return array(
'driver' => 'Ormauth',
'verify_multiple_logins' => false,
'salt' => 'put_your_salt_here',
'iterations' => 10000,
);
※必要に応じて PKGPATH/auth/config/ormauth.php もコピーして編集したらいいと思う。
必要なテーブルを作成する
- oil r migrate --packages=auth で必要なテーブルを作成する。
$ oil r migrate --packages=auth
これで、必要なテーブルがわんさか出来上がるはず。
※これを実行すると、PKGPATH/auth/migrations/*.php を実行してくれるみたい。
管理者ページを作ってみる
- 試しに oil g admin... で管理者用ページなものを作ってみる
oil g admin memo name:string
oil r migrate
これで、/admin/memo にアクセスできるはず。
ログイン画面が表示されてる。
この時、DBのusersテーブルをみてみると、usernameが「guest」のレコードと「admin」のレコードがある。
- adminが管理者っぽいので、ログインしてみる。
admin/admin でログイン出来るっぽい。
以下のファイルの93行目辺りに書いてある。
<?php
// (略)
\Auth::instance()->create_user('admin', 'admin', 'admin@example.org', $group_id_admin, array('fullname' => 'System administrator'));
APPPATH/classes/controller/admin.php にて、Model_Userが無いよとエラーになるので、PKGPATH/auth/model/auth/user.php を使うように修正する
※最初はModel_Userを自作したらいいね!って書いてたけど、どうやら、packageに入ってる奴を使ったほうが良い気がする。
$current_user = Auth\Model\Auth_User::find_by_username(Auth::get_screen_name());
あと、APPPATH/classes/controller/base.php にも Model_User が使われてるので、こっちも直しておく。
10行目くらい。
<?php
// (略)
$this->current_user = Auth::check() ? Auth\Model\Auth_User::find_by_username(Auth::get_screen_name()) : null;
グループ関連のエラーが出る。ので、対応。
Model_Userも作ってログインしてみる。
が、やっぱりエラー。
Fuel\Core\PhpErrorException [ Notice ]: Object of class Auth\Model\Auth_Group could not be converted to int
PKGPATH/auth/classes/auth/group/ormgroup.php @ line 90
上記のようなエラーが出る。
どうやら、グループ関連でダメらしい。
- APPPATH/classes/controller/admin.php をそれっぽく修正してみる。
15行目辺り。
<?php
// (略)
if ( ! Auth::member(6))
こんな感じ。突然の「6」。
oil r migrate --packages=auth にて作成された users テーブルをみてみると、 group_id 列がある。
この値を設定してみた。
ら、エラー無くログイン出来た。
でも、なんだか色々とダメな感じがする。
-
突然の6とか、
-
そもそも oil g admin の方を作成するアプリに対して最適な書き方に…とか、
-
と言っても、認証処理しかせんしなぁーとか。
どうやって対処するのが一番良いのか後でちゃんと考えてみる。(考えないかも知れんけど。)
Ormauthの恩恵を少しだけ考える
$ oil r migrate --packages=auth
により、以下のテーブルができてる。
各々の使い方は、まだちゃんと分かってない。
users
users_groups
users_group_permissions
users_group_roles
users_metadata
users_permissions
users_roles
users_role_permissions
users_user_permissions
users_user_roles
とりあえず、 users_metadata だけは key,value を保存したい人向けってのはわかる。
なので、Ormauthっぽい参考例を一つ書いてみる。
と、言っても全然役に立たん気がするけど…
認証済みの前提で、以下のようにすると、users_metadata にkey==hoge, value==fugaなレコードが保存される。
$current_user->metadata[] = Auth\Model\Auth_Metadata::forge(array(
'parent_id' => $current_user->id,
'key' => 'hoge',
'value' => 'fuga',
));
$current_user->save();
Simpleauthの時の $data = unserialize($this->profile_fields); みたいなのが要らない。
保存も楽。
当たり前すぎやけど…