deim【デイム】オフィシャルブログ

deim【デイム】は兵庫県川西市でホームページの制作,広告媒体のデザインなどをしています。

 
  1. text
  2. Codeigniterの認証をZend_Authで実装

    Codeigniter、面白いです。

    暇を見つけては色々試して遊んでいるんですが、なんと認証機能が無い。

    あとSessionの維持を独自にCookieで実装している。

    まだ発展途上とはいえ、これは現場では不評だろうなぁ。

    単純なフレームワークだけに、必要なものは自分で実装しろってこと

    なんでしょうか。次のバージョンに期待です。

    たしかに拡張性しやすい設計なのですが、スマイリーヘルパーのように

    「え!?」と思わせる機能がついていたりするので、認証機能が無い

    のは意外でした。

    で、ZendFrameworkのZend_Authを使って自作してみたわけです。

    ZFの使いどころが徐々にわかってきました(笑)。

    MY_Auth extends CI_Controller implements Zend_Auth_Adapter_Interface

    というクラスを作って、hooksに入れて、pre_controller(コントローラーが呼び出される直前)

    に設定したら、案外うまくいきました。

    /admin/ ディレクトリのみAuthを要求するようにして、他はpublicに設定できてます。

    ソースもここへ載せたいのですが、このブログの独自CSSがまだへっぽこで、

    綺麗に表示できないのでそのうちどこかに置きますね。

    GoogleCodeあたりが良いんでしょうか…Githubも面白そうです。

    やってみて面白かったのは、Zend_Authのシンプルさ。

    認証そのものの実装はCodeigniterのDBクラスを使っているので、

    Zend_Authの役割はログインしている、していない、できた、できなかった

    の結果だけを任せています。まさにやりたいことをそのまま形にできました。

    これぞ疎結合フレームワークの真骨頂ですね。

    今回は認証に使うユーザーのデータストアはDBですが、BASICやLDAPなどに

    切り替えるのも簡単そうです。

    ついでにZend_Sessionのnamespace設定を使って、

    同じドメインでも、サブディレクトリ毎に違う認証を使えるようにも

    拡張しました。(admin用とか店舗用とか)

    このように、「フレームワークを使ったフレームワーク」みたいなのを

    用意しておくと、いざ開発が始まった時に慌てなくて済みますし、

    まず何を作ろうか、で迷うこともないですね。

    自社のベストプラクティスとでもいいましょうか…

    つぎはZend_Aclも入れておこうかな。コレもCodeigniterに欲しい機能。

    是非ともReactorチームには頑張ってほしいものです。

    1. deimofficialの投稿です
    blog comments powered by Disqus