弊社の OpenID 拡張の参考に。。色々調べてるところです。
mixi の OpenID が AX と SREG に対応してるとの事なので試してみた。
SREG は使った事あるので、今回は AX を実装。以下のような感じでちゃんとニックネーム取れた。
AXだと独自で拡張した野良フィールド足して返してもいいのかなぁ。
やはり、さらりと使いたい人用の SREG と色々追加の属性が取れる AX の両方を実装しておいた方がいいのだろうか。
mixi の OpenID が AX と SREG に対応してるとの事なので試してみた。
SREG は使った事あるので、今回は AX を実装。以下のような感じでちゃんとニックネーム取れた。
AXだと独自で拡張した野良フィールド足して返してもいいのかなぁ。
やはり、さらりと使いたい人用の SREG と色々追加の属性が取れる AX の両方を実装しておいた方がいいのだろうか。
# だいぶ適当
sub login : Local {
my( $self, $c ) = @_;
my $csr = Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new,
args => $c->req->parameters,
consumer_secret => 'xxx',
required_root => 'http://localhost:3000',
);
my $identity = $c->req->param('identity');
if ($c->req->param('openid-check')) {
if (my $vident = $csr->verified_identity) {
my $ax = $vident->signed_extension_fields(
'http://openid.net/srv/ax/1.0',
);
# ニックネームとれた!
return $c->res->body( join ':', $vident->url, $ax->{'value.nickname'} );
}
}
elsif (my $claimed = $csr->claimed_identity($identity)) {
$claimed->set_extension_args('http://openid.net/srv/ax/1.0', {
mode => 'fetch_request',
'type.nickname' => 'http://axschema.org/namePerson/friendly',
required => 'nickname',
});
my $check_url = $claimed->check_url(
delayed_return => 1,
return_to => 'http://localhost:3000/login?openid-check=1',
trust_root => 'http://localhost:3000',
);
return $c->res->redirect( $check_url );
}
}