- 2008年4月 8日 00:55
- 仕事のこと
前の記事で masaki さんに「そこは auto_create するところな気がします.」と教えてもらったのでちょろちょろっといじってみる。
個人的には CPAN に上がっている方より CodeRepos に上がっている方が好きなので。
Bakelatte/etc/conf/bakelatte.yml
authentication:
default_realm: member
realms:
member:
credential:
class: OpenID
store:
class: DBIx::Class
user_class: DBIC::Bakelatte::Member
id_field: url
auto_create_user: 1
Bakelatte/lib/Bakelatte/Controller/Login.pm
=head2 do_login
=cut
sub do_login : Local {
my ( $self, $c ) = @_;
$c->log->info('*** Bakelatte::Controller::Login::do_login ***');
$c->req->base( URI->new( $c->config->{service_url} ) );
$c->req->uri( URI->new( $c->config->{service_url} . $c->req->path ) );
if ( $c->authenticate ) {
## SUCCESS
$c->res->redirect('/');
} else {
## FAILURE
$c->load_template('login/index.tt');
}
}
Bakelatte/lib/Bakelatte/Schema/Member.pm
package Bakelatte::Schema::Member;
use strict;
use warnings;
use base qw/ DBIx::Class /;
use DateTime;
__PACKAGE__->load_components( qw/ ResultSetManager +Bakelatte::DBIC Core / );
__PACKAGE__->table('member');
__PACKAGE__->add_columns( qw/
id
created_on
modified_on
nickname
atom
declared_atom
declared_foaf
declared_rss
display
foaf
foafmaker
rss
url
/);
__PACKAGE__->set_primary_key('id');
sub auto_create : ResultSet {
my ( $class, $hashref, $c ) = @_;
my $dt = DateTime->now( time_zone => $c->config->{time_zone} );
my $member = $class->create( {
created_on => $dt || undef,
modified_on => $dt || undef,
nickname => undef,
atom => $hashref->{atom} || undef,
declared_atom => $hashref->{declared_atom} || undef,
declared_foaf => $hashref->{declared_foaf} || undef,
declared_rss => $hashref->{declared_rss} || undef,
display => $hashref->{display} || undef,
foaf => $hashref->{foaf} || undef,
foafmaker => $hashref->{foafmaker} || undef,
rss => $hashref->{rss} || undef,
url => $hashref->{url} || undef,
} );
return $member;
}
1;
これくらい実装してグッとガッツポーズをするとこんなのが出来上がる。
livedoor, yahoo, jugem, typekey などなどの OpenID でログインすることが出来る。はてなはアカウント持ってないから試してないけどググッとガッツポーズすれば何とかいけるはず。
auto_create って今回はじめて使ってみたけど、こんな感じの実装でよいのかしらん?
ドキュメント読んでも config の設定の仕方とか auto_create の定義の仕方とかよくわからなかった。 Authentication 周りのソースを読むと、どうも自分で実装しなくちゃいけないのかなぁ・・・、ってなった。
第3引数に $c が渡ってきちゃうとことか見ると、たぶん他のやり方があるんじゃないかなぁなんて気がしてます。
- Newer: DBIx::Class::Schema::Slave について
- Older: Re:Cred::OpenID と find_user
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://hibinokoto.jp/mt/mt-tb.cgi/267
- Listed below are links to weblogs that reference
- Catalyst::Authentication::Credential::OpenID(CodeRepos の方) でログイン from 日々のこと