TOP設計・移行・活用> Sledgeでの認証処理の実装
SledgeによるWebアプリケーションフレームワーク入門
SledgeによるWebアプリケーションフレームワーク入門

第3回:認証
著者:ライブドア  池邉 智洋   2005/6/27
前のページ  1  2  3   4  次のページ
Sledgeでの認証処理の実装

   では、Webアプリケーションフレームワーク「Sledge」における認証機構の実装について具体的に見てみましょう。
Sledgeの認証サポート

   Sledgeがフレームワークとしてサポートする認証機構はクラス単位でのAuthorization処理のみとなります。

   例えば、ThinkIT::Pages::Rootは認証が不要だが、ThinkIT::Pages::Authzでは認証が必要であるという処理ができます。IDとパスワードが一致しているのかを確認する処理や、認証が必要な場合にどういうアクションを行なうのかという処理は独自に記述する必要があります。


Authorizerクラスの実装

   SledgeではAuthorizerクラスというAuthorization処理を行なうためのパーツが提供されています。Authorizerクラスはdispatch_XXXが呼びだされる前にそれを実行していいかどうかを判断します。

   Sledgeのライフサイクルを表4に示します。認証処理の部分で認証に失敗した場合はログインページへのリダイレクトが行なわれ、処理がキャンセルされます。

  1. Pagesオブジェクトの生成
  2. Requestオブジェクトの生成、Authorizerオブジェクトの生成など
  3. AFTER_INITフックの実行
  4. テンプレートのロード
  5. 認証処理(ここで失敗となった場合、以下の処理はキャンセルされる)
  6. BEFORE_DISPATCHフックの実行
  7. dispatch_XXXの実行
  8. AFTER_DISPATCHフックの実行
  9. OUTPUTフィルターの適用
  10. コンテンツの出力
  11. AFTER_OUTPUTフックの実行

表3:Sledgeのライフサイクル

   デフォルトの設定ではSledge::Authorizer::Nullという何も処理をしないクラスが使用されるようになっています(注2)。

※注2: デザインパターンの世界ではNull Objectパターンと呼ばれる手法です。

   独自の認証処理を行なうためにはSledge::Authorizer::Nullクラスを継承したAuthorizerクラスを実装します。Authorizerクラスではauthorizeメソッドのみを実装します。

   一般的な処理としては、authorizeメソッド中ではセッションのあるキーに値が設定されているかをチェックします。値が設定されていない場合、未認証のクライアントと見なし、ログインフォームへのリダイレクト処理を行ないます。

package ThinkIT::Authorizer;
use strict;
use base qw(Sledge::Authorizer::Null);

sub authorize {
    my($self, $page) = @_;
    unless(my $user_info = $page->session->param('login')) {
        return $page->redirect('/login');
    }
}

   それでは、認証が必要なPagesクラスのcreate_authorizerメソッドで作成したAuthorizerクラスのインスタンスを生成してみます。

package ThinIT::Pages::Authz:
use strict;
use base qw(ThinIT::Pages);
use ThinIT::Authorizer;

__PACKAGE__->tmpl_dirname('authz');

sub create_authorizer {
    return ThinIT::Authorizer->new($self);
}

   セッションにloginというキーでユーザ情報がセットされていないユーザは認証されていないと見なして、ログインフォームへリダイレクトさせています。

前のページ  1  2  3   4  次のページ


株式会社ライブドア 池邉 智洋
著者プロフィール
株式会社ライブドア  池邉 智洋
ネットサービス事業本部 システムグループ マネージャー。2001年10月よりライブドア(当時オン・ザ・エッヂ)にて受託開発業務のWebアプリケーション開発に従事。2003年11月よりlivedoorのポータル化にたずさわり、各種サービスの開発を行う。個人的にCPANモジュールやApacheモジュールの公開も行っている。


INDEX
第3回:認証
  はじめに
  Webアプリケーションでの認証
Sledgeでの認証処理の実装
  ログインフォーム