Ark::Plugin::Authentication::Store::DBIx::Skinny書いたよ

ArkのDBIx::Skinny用認証プラグインgithubに上げました。Ark本体をforkしてpull request上げた方がいいかなとも思ったけど、ひとまず単体で。

DBIx::Skinnygithubの最新版(昨日pushしたばかり)を入れないとテストが通らないので注意。


では、簡単に使い方を。DBIx::SkinnyをMyApp::Skinnyでsetupしている場合、

package MyApp::Model::Skinny;
use Ark 'Model::Adaptor';

__PACKAGE__->config(
    class => 'MyApp::Skinny',
);

のように、ArkのModelを作成。ark.pl model Skinny Model::Adaptorとかで作るとよろし。

MyApp.pmのuse_pluginsに追加。

use_plugins qw/
...
Authentication::Store::DBIx::Skinny
/;

これでDBIx::Skinnyを使った認証が出来るようになります。

あとは必要に応じてconfigを書けばOK。デフォルトではMyApp.pmで

__PACKAGE__->config(
    'Plugin::Authentication::Store::DBIx::Skinny' => {
        model      => 'Skinny',
        table      => 'users',
        user_field => 'name',
    }
);

したのと同じになります。


ついでに、Arkのパスワード認証について。デフォルトではパスワードは平文として扱われますが、configに

'Plugin::Authentication::Credential::Password' => {
    password_type => 'hashed',
},

を設定することで暗号化したパスワードやハッシュ値による認証が可能です。

Arkではパスワードをどのように扱うかはModelに委譲しますので、例えばSHA-1を使う場合は

package MyApp::Model::Digest;
use Ark 'Model::Adaptor';

__PACKAGE__->config(
    class => 'Digest::SHA1',
);

1;

のようなModelを作ってやる必要があります。多少面倒に感じるかも知れませんが、柔軟性があるし、見通しもかえっていいですね。