Authentication::Store::HTTP
作った。
昨日の夜書いた問題により、$c->login
のオーバーライドという暴挙に出ているため、Credential 系プラグインよりも先にロードする必要がありますw
Cred プラグインを選べるので、::Basic::Remote よりは良くなってはいる。
でもこんな感じで
sub get_user {
my ( $self, $id, $password ) = @_;
$self->{ua} ||= LWP::UserAgent->new;
my $request = HTTP::Request->new( HEAD => $self->{auth_url} );
$request->headers->authorization_basic( $id, $password );
my $response = $self->{ua}->request( $request );
return unless $response->is_success;
my $user = {
id => $id,
password => $password,
store => ref $self || $self,
};
return bless $user, 'Catalyst::Plugin::Authentication::User::Hash';
}
みたいに Authentication::CDBI::Basic::Remote ぽいのを再実装しようとして詰まった。
こうやってかけるようにならねーかなぁ。
Catalyst::Plugin::Unicode
とかあったんだ! ほとんど同じやつ作ってた。
入れ替えた。
HTML::FillInForm::ForceUTF8 : blog.nomadscafe.jp
ただ、Catalyst::Plugin::UnicodeやDBIx::Class::UTF8Columns、Class::DBI::utf8などを使っている場合、必要ないかも。
必要ないんですが、プラグインのロード順に気をつける必要があります。
というのも Unicode も FillInForm もどちらも finalize をオーバーライドしているので、Unicode のほうがあとに実行されるように
use Catalyst qw/FillInForm Unicode/;
と FillInForm よりも後ろに書いておく必要があります。
BKだなぁ。
kazeburo さんのやつをつかえばこれに気をつける必要もなくなるのでいいかも。
ForceUTF8
lyokato さんの View::TT::ForceUTF8 とか UTF8Columns とかいろいろ使って、今のプロジェクトを UTF8 化中。
さっき Catalyst::Plugin::Email::Japanese の ForceUTF8 対応版をうぷしといた。
なんかそれぞればらばらに設定しててめんどいなーこれ。
あと $c->req->parameters
などを ForceUTF8 する奴も作ってつかっているのだけど、激しく適当で間に合わせもいいところ。これはもう少し仕様考えてから誰も作ってなかったらリリースする。
今日のBK
Catalyst 組み込みのテストサーバーは -k
オプションをつけて keepalive を有効にしないと IE でリダイレクトがうまく動かないことがある。
hide-k.net#blog: Catalyst::Model::DBIC::Schemaを使ってみた
と、とっても便利なC::M::DBIC::Schemaなんですが、既存のプラグインとあまり相性がよくありません。 特にC::P::Authentication::Store::DBICは全く動かなくなるので注意です。(今、パッチが作られているみたいです。)
今作ってるアプリではめちゃくちゃとりあえずの対応としてトップレベルの auto アクションで
sub auto : Private {
my ( $self, $c ) = @_;
# dirty hack for Auth::DBIC and Model::DBIC::Schema
$c->config->{authentication}->{dbic}->{user_class} = $c->model('Schema::User');
1;
}
などとしてたりとか。
はやく対応してくんないかな。
Plugin::FillInForm
の finalize
sub finalize {
my $c = shift;
if ( $c->isa('Catalyst::Plugin::FormValidator') ) {
$c->fillform
if $c->form->has_missing
|| $c->form->has_invalid
|| $c->stash->{error};
}
return $c->NEXT::finalize(@_);
}
$c->stash->{error}
があると問答無用で fillform る。あー何この余計なお世話機能。
小一時間はまったよ。。
$c->form の名前がだめ
ごろうさんが CGI.pm の param の扱いがいけてねーとかいってて、オレは validator がほしいよ、とかいってたんだけど、よく考えたら普通に validator つかえるじゃんか。
なんかページング処理とかで $c->req->params->{page}
を自前でごにょっと処理してて嫌な感じだったんだけど
$c->form( page => [ ['GREATER_THAN', 1] ] );
とかしとけば $c->form->valid('page')
で綺麗な値がとれると。
多分、めちゃくちゃ常識だと思われますが、僕は form という名前にだまされたのかこういう用途につかうということをまったく思いつかなかった。
$c->validator
とかにすればいいのに!!