こんにちは,五十嵐です.認証の話に入る前にちょっとひと休み.今回は,今までに端折った部分をいくつか書いてみます.
まずはテンプレート.基本は "[%" と "%]" で囲んだ部分が自動的に展開されます.IF-ELSE-END 文や FOREACH 文などを書くことができ,変数を使って制御が可能です.詳しい文法は "
Template::Manual::Syntax - Directive syntax, structure and semantics" を参照するとよいでしょう.
次に,SHA-1 のハッシュ値の作成.admin 用のパスワードとして "admin" というパスワードを設定しましたが,これは Perl の Digest::SHA モジュールを使ってハッシュ値を作成しました.("
Catalyst::Manual::Tutorial::Authentication - Catalyst Tutorial - Part 4: Authentication" に記載されています.)
$ perl -MDigest::SHA -e 'print Digest::SHA::sha1_hex("admin"), "\n"'
d033e22ae348aeb5660fc2140aec35850c4da997
$
ここで表示された "d033e22ae348aeb5660fc2140aec35850c4da997" をデータベースの初期値として使用しています.
これも書き忘れたかもしれません.script/securesbm_server.pl は,"-r" オプションを付けると,catalyst の環境を監視して,ファイルが変更されると自動的に再起動してくれます.
$ ./script/securesbm_server.pl -r
...(省略)
File(s) "...(省略)/Controller/Admin.pm" modified, restarting
...(省略)
ついでに,環境変数 DBIC_TRACE=1 を設定しておくと,DBIC から発行された SQL を見ることができます.
ここで Catalyst の "Action" について少し書いておきます.
ビルトインアクションと呼ばれるものが 5 つあります.default, index, begin, end, auto.これらの動きを理解しておくと,Catalyst の動作を使って,色々な実行をさせることができます.
- default : Private
- どこにも Action がマッチしない場合に呼ばれます.ページが存在しない旨を表示したり,自動的にトップページにジャンプさせたりするのに使用します.
- index : Private
- アクションが明示的に指定されていないときに呼び出されるアクションです.index.html のようなもの.MyApp::Controller::Admin の場合には標準の URL は http://some.host/admin/ となりますが,この場合の index.html に相当するもの http://some.host/admin/index と同じ意味だと考えればよいでしょう.
- begin : Private
- 明示的なアクションが実行される前に呼び出されます.begin は一つしか呼ばれません.つまり,様々な Controller の中で begin を定義しても,最も深い階層の begin が一つだけ呼ばれることになります.
- end : Private あるいは end : ActionClass('RenderView')
- 明示的なアクションが実行された後に呼び出されます.begin と同様,一つの end しか呼びだされません.end は最後に View を自動的に呼びます.
ActionClass('RenderView') を指定する方法は新しい方法で,HTML のボディや出力が指定されていた場合には,View を呼び出さないようになっています.また ?dump_info=1 という引数を URL につけると,強制的に環境が表示されます.
- auto : Private
- begin の後,明示的なアクションが実行される前に呼び出されます.begin や end とは異なり,各 Controller で定義していると,階層ごとに auto は呼び出されます.例えば,MyApp::Controller::Root とMyApp::Controller::Admin の両方で auto が定義されていると,Root::auto と Admin::auto が順次呼ばれてから明示的なアクションが実行されます.認証や,アクセス制御に使用するとよいでしょう.
マニュアルでは「ビルトイン」という言葉で説明されていますが,最初から用意されているわけではなく,自分で定義する必要があります.予約語のアクションということでしょうか.
この辺りのことは "
Catalyst::Manual::Intro - Introduction to Catalyst" に記述されているのですが,初めて読んだ時にはちんぷんかんぷんでした.Catalyst をいろいろと触っているうちにやっと意味がわかるようになってきました.
前回の認証のところで Root.pm の auto で認証の確認を行いました.auto であれば他のコントローラで auto が指定されていても必ず呼び出されるからです.begin では,Root.pm 内の Action が呼ばれたときには有効ですが,Admin.pm が呼ばれた場合には,Admin.pm で begin が設定されていれば Root.pm の begin は呼ばれません.この辺りを良く理解しておくと,コントローラの分離と,認証の設定がわかってくることでしょう.
2007/03/23 記
参考:
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
カテゴリ:SBM , 開発日記
タグ:Secure-SBM
<< [Secure-SBM:012] いよいよ認証 | Main | TGIF: アニメ技能検定 >>