ついに出た!最新Perlフレームワーク「Ark」徹底解剖

第4回 Ark チュートリアル:応用編(その2)

この記事を読むのに必要な時間:およそ 3 分

前回に引き続き,サンプルアプリケーションとしては掲示板を開発しながら,Arkの利用方法について紹介します。

掲示板の概要

今回作成するアプリケーションは,OpenID認証を使用したシンプルな掲示板アプリケーションです。

ここまでのおさらい

前回依存モジュールの準備,モデルの作成,テンプレートの利用など,基礎部分の開発を行いました。今回は,その続きを行っていきます。

アプリケーションの作成(続き)

ログイン処理

次にログイン処理を作っていきましょう。今回はOpenIDを使用したログイン処理を実装します。

Arkではログイン処理などはプラグインとして用意されています。今回は認証プラグインとセッションプラグインを使用してログイン処理を作成します。

プラグインを使うにはアプリケーションクラス(MiniBBS.pm)でその使用を宣言します。具体的には以下のようにします。

use_plugins qw{
    Session
    Session::State::Cookie
    Session::Store::Memory

    Authentication
    Authentication::Credential::OpenID
    Authentication::Store::Null
};

これでセッションと認証のプラグインをロードできます。ロードしたプラグインを見てみましょう。

まずセッションプラグインは,セッションIDを保存するためのStateと,セッションデータを保存するためのStoreの組み合わせを指定する必要があります。今回のコードでは

Sessionセッションプラグイン
Session::State::CookiecookieにセッションIDを登録する
Session::Store::Memoryメモリにセッションデータを持つ

を使用します。たとえば,Cookieの代わりにURLにセッションIDを埋め込みたいときはState::Cookieの代わりにState::URIを使用したり,データをmemcachedなどに保存したり,その他Cacheインターフェースを使用してデータを保存したい場合はStore::Modelを使用したりということができます。

認証プラグインもセッションと同様に,認証方法を指定するCredentialとユーザ情報を保存するStoreというプラグインを組み合わせて使用します。

今回はOpenID認証を使用しているため,ユーザ情報は外部のサービスが持っていますのでCredentialのみの指定で使用します。そのような場合はStore::Nullというプラグインを使用します。

もちろん,OpenID認証を使用していてもユーザ情報をアプリケーションで拡張するために自前のStoreと組み合わせることも可能です。ですが,今回はOpenID認証でログイン処理を使うだけなので省略します。

プラグインの準備ができましたので,次はログイン・ログアウトを処理するコントローラを書きます。Loginというコントローラ名にしましょう。

$ ark.pl controller Login

というコマンドでひな形を生成します。

URL的には/loginでログイン,/logoutでログアウトとなるようにコントローラを書くと以下のようになります。

sub login :Path :Args(0) {
    my ($self, $c) = @_;

    if (my $user = $c->authenticate) {
       # login 成功
       $c->redirect( $c->uri_for('/') );
    }
}

sub logout :Global {
    my ($self, $c) = @_;
    $c->logout;
    $c->redirect( $c->uri_for('/') );
}

また,ログインフォームのテンプレートをroot/login/login.mtとして置いておきます。

<p>OpenID でログイン</p>

<form method="get">
<p>
  <label for="openid_identifier">OpenID URI:</label>
  <input type="text" id="openid_identifier" name="openid_identifier" />
</p>
<p><input type="submit" value="login"/></p>
</form>

これでログイン処理は完成です。

著者プロフィール

村瀬大輔(むらせだいすけ,ハンドルネーム:typester)

1981年2月生まれ。2004年9月株式会社カヤックに入社。

カヤックでは自社サービス「こえ部」を担当する傍ら,ラボチームBM11に所属し「Ark」「nim」といったオープンソースプロダクトを開発。また「Shibuya.pm」や「YAPC::Asia」にスピーカーとして参加するなど,Perlプログラマとして活躍の場を広げている。

コメント

コメントの記入