Dancer-Plugin-Auth-Twitter
view release on metacpan or search on metacpan
lib/Dancer/Plugin/Auth/Twitter.pm view on Meta::CPAN
};
# define a route handler that bounces to the OAuth authorization process
register 'auth_twitter_authorize_url' => sub {
if (not defined twitter) {
croak "auth_twitter_init must be called first";
}
my $oauth_tokens = twitter->oauth_request_token({
callback => $callback_url
});
my $uri = twitter->oauth_authorization_url({
oauth_token => $oauth_tokens->{oauth_token}
});
session request_token => $oauth_tokens->{oauth_token};
session request_token_secret => $oauth_tokens->{oauth_token_secret};
debug "auth URL : $uri";
return $uri;
};
# define a route handler that bounces to the OAuth authentication process
register 'auth_twitter_authenticate_url' => sub {
if (not defined twitter) {
croak "auth_twitter_init must be called first";
}
my $oauth_tokens = twitter->oauth_request_token({
callback => $callback_url
});
my $uri = twitter->oauth_authentication_url({
oauth_token => $oauth_tokens->{oauth_token}
});
session request_token => $oauth_tokens->{oauth_token};
session request_token_secret => $oauth_tokens->{oauth_token_secret};
debug "auth URL : $uri";
return $uri;
};
get '/auth/twitter/callback' => sub {
my $token = session('request_token');
my $token_secret = session('request_token_secret');
my $verifier = params->{'oauth_verifier'};
my $denied = params->{'denied'};
if (!$denied && $token && $token_secret && $verifier) {
# everything went well:
my $access = twitter->oauth_access_token({
token => $token,
token_secret => $token_secret,
verifier => $verifier,
});
my $twitter_user_hash;
my $success = eval {
$twitter_user_hash = twitter->verify_credentials({
-token => $access->{oauth_token},
-token_secret => $access->{oauth_token_secret},
});
1;
};
if (!$success || !$twitter_user_hash) {
Dancer::Logger::core("no twitter_user_hash or error: $@");
return redirect $callback_fail;
}
$twitter_user_hash->{'access_token'} = $access->{oauth_token},
unless exists $twitter_user_hash->{'access_token'};
$twitter_user_hash->{'access_token_secret'} = $access->{oauth_token_secret}
unless exists $twitter_user_hash->{'access_token_secret'};
# save the user
session 'twitter_user' => $twitter_user_hash;
return redirect $callback_success;
}
else {
# user did NOT authenticate/authorize:
session request_token => '';
session request_token_secret => '';
return redirect $callback_fail if $denied; # user denied access
return send_error 'no request token present, or no verifier';
}
};
register_plugin;
__END__
=pod
=encoding UTF-8
=head1 NAME
Dancer::Plugin::Auth::Twitter - Authenticate with Twitter
=head1 VERSION
version 0.07
=head1 SYNOPSIS
package SomeDancerApp;
use Dancer ':syntax';
use Dancer::Plugin::Auth::Twitter;
auth_twitter_init();
before sub {
if (not session('twitter_user')) {
redirect auth_twitter_authenticate_url;
}
};
get '/' => sub {
"welcome, ".session('twitter_user')->{'screen_name'};
};
( run in 2.159 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )