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 )