Help us understand the problem. What is going on with this article?

FuelPHP 1.6 で OrmAuth 使って oil generate admin... でログインでコケる問題に暫定対処する

More than 5 years have passed since last update.

まだ未完成。
とりあえず、自分用にメモです。

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 に変更

APPPATH/config/auth.php
<?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行目辺りに書いてある。

PKGPATH/auth/migrations/005_auth_create_authdefaults.php
<?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に入ってる奴を使ったほうが良い気がする。

APPPATH/classes/controller/admin.php
                    $current_user = Auth\Model\Auth_User::find_by_username(Auth::get_screen_name());

あと、APPPATH/classes/controller/base.php にも Model_User が使われてるので、こっちも直しておく。
10行目くらい。

APPPATH/classes/controller/base.php
<?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行目辺り。

APPPATH/classes/controller/admin.php
<?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なレコードが保存される。

APPPATH/classes/admin/hoge.php
                $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); みたいなのが要らない。
保存も楽。

当たり前すぎやけど…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした