Amon2-Auth-Site-Hatena
view release on metacpan or search on metacpan
lib/Amon2/Auth/Site/Hatena.pm view on Meta::CPAN
$self->authorize_url ;
}
sub auth_uri {
my ($self, $c, $callback_uri) = @_;
my $request_token = $self->ua->get_request_token(
callback_url => $callback_uri || $self->redirect_url,
scope => join(',', @{$self->scope}),
) or die $self->ua->errstr;
$c->session->set(auth_hatena => {
request_token => $request_token->token,
request_token_secret => $request_token->secret,
});
$self->ua->{authorize_path} = $self->detect_authorize_url_from($c);
$self->ua->url_to_authorize(token => $request_token);
}
sub callback {
my ($self, $c, $callback) = @_;
my $error = $callback->{on_error};
my $verifier = $c->req->param('oauth_verifier')
or return $error->("Cannot get a `oauth_verifier' parameter");
my $session = $c->session->get('auth_hatena') || {};
my $token = $session->{request_token};
my $token_secret = $session->{request_token_secret};
return $error->('request_token, request_token_secret are both required')
if (!$token || !$token_secret);
my $request_token = OAuth::Lite::Token->new(
token => $token,
secret => $token_secret,
);
my $access_token = $self->ua->get_access_token(
token => $request_token,
verifier => $verifier,
) or return $error->($self->ua->errstr);
my @args = ($access_token->token, $access_token->secret);
if ($self->user_info) {
my $res = $self->ua->get($self->user_info_url);
return $error->($self->ua->errstr) if $res->is_error;
my $data = decode_json($res->decoded_content);
push @args, $data;
}
$callback->{on_finished}->(@args);
}
1;
__END__
=encoding utf8
=head1 NAME
Amon2::Auth::Site::Hatena - Hatena authentication integration for Amon2
=head1 SYNOPSIS
# config
+{
Auth => {
Hatena => {
consumer_key => 'your consumer key',
consumer_secret => 'your consumer secret',
}
}
}
# app
__PACKAGE__->load_plugin('Web::Auth', {
module => 'Hatena',
on_error => sub {
my ($c, $error_message) = @_;
...
},
on_finished => sub {
my ($c, $token, $token_secret, $user) = @_;
my $name = $user->{url_name}; #=> eg. antipop (id)
my $nick = $user->{display_name}; #=> eg. kentaro (nick)
my $image = $user->{profile_image_url};
$c->session->set(hatena => {
user => $user,
token => $token,
token_secret => $token_secret,
});
$c->redirect('/');
},
});
=head1 DESCRIPTION
This is a Hatena authentication module for Amon2. You can easily let
users authenticate via Hatena OAuth API using this module.
=head1 ATTRIBUTES
=over 4
=item consumer_key (required)
=item comsumer_secret (required)
=item scope (Default: C<[qw(read_public)]>)
API scope in ArrayRef.
=item user_info (Default: true)
( run in 1.855 second using v1.01-cache-2.11-cpan-5735350b133 )