肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

認証について考える


Ethnaにはmojaviのようなカンタン認証機能みたいなものはついてない。

まあ各自自由に実装してくれ、という意味なんだろうけど。

そこで、

  1. Hatena認証などの外部APIで認証
  2. PEAR::Authを使う
  3. 自前で認証アクションを作成する


あたりがあると思うけど、それぞれいいところ悪いところあります。


正直私たちのように、Hatenaなどのあらゆるウェブサイトでアカウントを持っているような人間にとっては、1.は非常に便利だし、アカウント情報がバラつかないからいいけど、やっぱり周りの友達見てもそうはいかないし、まあ身内で使うようなシステムでわざわざ外部にアカウントとらせるのもなんかな、というのもある。


そして、2.は昨日からハマり続けているところだけど、「ログイン情報を保存する」機能を実装しようとしたところ、相当ハマる。自動ログインてやつですね。EthnaPEAR::Authがセッションを別々に管理しようとしているところが問題だと考える。実際、Ethnaが生成したセッションIDを、PEAR::Authがregenerateして上書きしちゃってる挙動が見られた。通常の認証アクションだけならうまくいくのだけど、クッキーやらセッションやら、ちょっと考えなきゃいけないような、「ログイン情報を保存(次回から自動でログイン)」機能を実装するためには、やっぱりPEAR::Authは不便だった。。*1

そもそもログインセッションを継続させるようなアプリケーションはセキュリティが・・・とかなんとかいう話もあるけど、でもオンラインバンクみたいな、ものすごく厳密にセキュリティを確保しなければいけないようなサイトではない場合、常にログイン状態であってほしいというのはよくある話だし。(ここでいうセキュリティの確保というのは、サイト自体の、という意味です。プログラムにもちろんセッションホールが存在しちゃいけない・・・)


というわけで、色々今後使えるように、ログイン管理を実装した独自のクラスでも1つ作っておこうと思う。Ethnaのセッションと親和性の高いやつをね。



というのが、昨日5時間くらいEthna×PEAR::Authで悩んだ結論でした(笑)

*1:ていうかこの機能PEAR::Authに組み込んだらいいと思うのだけどいかがでしょう