Authen::UsersのデータベースハンドルをNanoAで使えた話

どうにかなるものです。

NanoAのデータベースハンドルを使えればよかったのだが、生憎とそんな機能はついていなかった。

NanoAのconfigを使えば、NanoA本体に影響を及ぼさずにデータベースハンドルを入れ替えることが可能でした。

アプリケーション(今の場合はLightBBS)用のdbメソッドを作ることによって、NanoA::Config::db を上書きしています。

こっちはなんとかできたのですが、 Crypt::SaltedHash を利用するのはちょっと難しそうです。

Authen::Users でnewした後に、プロパティを入れ替えればいけそうな気がしたのですが、認証の仕組みが違うので単純には行きませんでした。

Authen::Users はデータベースから取ってきたsha変換済みのパスワードと、入力したパスワードをsha変換したモノとを比較しています。 そこまでがセットになっているのです。

しかし、 Crypt::SaltedHash は、普通に変換するとsaltを自動的に入れてしまうので、単純に比較しても合わないのです。(元々それが特徴なわけですが) 比較するときは、変換済みのパスワードと入力したパスワードを Crypt::SaltedHash のvalidateメソッドに渡してやる必要があります。 すると、内部でsaltを解析して照合ができるようになります。 まあ、仕組みはわかりましたが。 さて、どうしたもんでしょう。

Comments

comments powered by Disqus