=head1 NAME
Net::Facebook::Oauth2 - a simple Perl wrapper around Facebook OAuth 2.0 protocol
=for html
 =head1 SYNOPSIS
Somewhere in your application's login process:
    use Net::Facebook::Oauth2;
    my $fb = Net::Facebook::Oauth2->new(
        application_id     => 'your_application_id', 
        application_secret => 'your_application_secret',
        callback           => 'http://yourdomain.com/facebook/callback'
    );
    # get the authorization URL for your application
    my $url = $fb->get_authorization_url(
        scope   => [ 'name', 'email', 'profile_picture' ],
        display => 'page'
    );
Now redirect the user to this C<$url>.
Once the user authorizes your application, Facebook will send him/her back
to your application, on the C link provided above. PLEASE NOTE
THAT YOU MUST PRE-AUTHORIZE YOUR CALLBACK URI ON FACEBOOK'S APP DASHBOARD.
Inside that callback route, use the verifier code parameter that Facebook
sends to get the access token:
    # param() below is a bogus function. Use whatever your web framework
    # provides (e.g. $c->req->param('code'), $cgi->param('code'), etc)
    my $code = param('code');
    use Try::Tiny;  # or eval {}, or whatever
    my ($unique_id, $access_token);
    try {
        $access_token = $fb->get_access_token(code => $code); # <-- could die!
        # Facebook tokens last ~2h, but you may upgrade them to ~60d if you want:
        $access_token = $fb->get_long_lived_token( access_token => $access_token );
        my $access_data = $fb->debug_token( input => $access_token );
        if ($access_data && $access_data->{is_valid}) {
            $unique_id = $access_data->{user_id};
            # you could also check here for what scopes were granted to you
            # by inspecting $access_data->{scopes}->@*
        }
    } catch {
        # handle errors here!
    };
If you got so far, your user is logged! Save this access token in your
database or session. As shown in the example above, Facebook also provides
a unique I for this token so you can associate it with a particular
user of your app.
Later on you can use it to communicate with Facebook on behalf of this user:
    my $fb = Net::Facebook::Oauth2->new(
        access_token => $access_token
    );
    my $info = $fb->get(
        'https://graph.facebook.com/v4.0/me'   # Facebook API URL
    );
    print $info->as_json;
=head1 DESCRIPTION
Net::Facebook::Oauth2 gives you a way to simply access FaceBook Oauth 2.0 protocol
For more information please see example folder shipped with this Module, or refer
to the L.
=head1 INSTALLATION
    cpanm Net::Facebook::Oauth2
Or the old-fashioned manual way:
   perl Makefile.PL
   make
   make test
   make install
=head1 AUTHOR
Mahmoud A. Mehyar, Emamod.mehyar@gmail.comE
=head1 CONTRIBUTORS
Big Thanks To
=over 4
=item * Takatsugu Shigeta L<@comewalk|https://github.com/comewalk>
=item * Breno G. de Oliveira L<@garu|https://github.com/garu>
=item * squinker L<@squinker|https://github.com/squinker>
=item * Valcho Nedelchev L<@valchonedelchev|https://github.com/valchonedelchev>
=back
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2012-2019 by Mahmoud A. Mehyar
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.1 or,
at your option, any later version of Perl 5 you may have available.
=cut
=head1 SYNOPSIS
Somewhere in your application's login process:
    use Net::Facebook::Oauth2;
    my $fb = Net::Facebook::Oauth2->new(
        application_id     => 'your_application_id', 
        application_secret => 'your_application_secret',
        callback           => 'http://yourdomain.com/facebook/callback'
    );
    # get the authorization URL for your application
    my $url = $fb->get_authorization_url(
        scope   => [ 'name', 'email', 'profile_picture' ],
        display => 'page'
    );
Now redirect the user to this C<$url>.
Once the user authorizes your application, Facebook will send him/her back
to your application, on the C link provided above. PLEASE NOTE
THAT YOU MUST PRE-AUTHORIZE YOUR CALLBACK URI ON FACEBOOK'S APP DASHBOARD.
Inside that callback route, use the verifier code parameter that Facebook
sends to get the access token:
    # param() below is a bogus function. Use whatever your web framework
    # provides (e.g. $c->req->param('code'), $cgi->param('code'), etc)
    my $code = param('code');
    use Try::Tiny;  # or eval {}, or whatever
    my ($unique_id, $access_token);
    try {
        $access_token = $fb->get_access_token(code => $code); # <-- could die!
        # Facebook tokens last ~2h, but you may upgrade them to ~60d if you want:
        $access_token = $fb->get_long_lived_token( access_token => $access_token );
        my $access_data = $fb->debug_token( input => $access_token );
        if ($access_data && $access_data->{is_valid}) {
            $unique_id = $access_data->{user_id};
            # you could also check here for what scopes were granted to you
            # by inspecting $access_data->{scopes}->@*
        }
    } catch {
        # handle errors here!
    };
If you got so far, your user is logged! Save this access token in your
database or session. As shown in the example above, Facebook also provides
a unique I for this token so you can associate it with a particular
user of your app.
Later on you can use it to communicate with Facebook on behalf of this user:
    my $fb = Net::Facebook::Oauth2->new(
        access_token => $access_token
    );
    my $info = $fb->get(
        'https://graph.facebook.com/v4.0/me'   # Facebook API URL
    );
    print $info->as_json;
=head1 DESCRIPTION
Net::Facebook::Oauth2 gives you a way to simply access FaceBook Oauth 2.0 protocol
For more information please see example folder shipped with this Module, or refer
to the L.
=head1 INSTALLATION
    cpanm Net::Facebook::Oauth2
Or the old-fashioned manual way:
   perl Makefile.PL
   make
   make test
   make install
=head1 AUTHOR
Mahmoud A. Mehyar, Emamod.mehyar@gmail.comE
=head1 CONTRIBUTORS
Big Thanks To
=over 4
=item * Takatsugu Shigeta L<@comewalk|https://github.com/comewalk>
=item * Breno G. de Oliveira L<@garu|https://github.com/garu>
=item * squinker L<@squinker|https://github.com/squinker>
=item * Valcho Nedelchev L<@valchonedelchev|https://github.com/valchonedelchev>
=back
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2012-2019 by Mahmoud A. Mehyar
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.1 or,
at your option, any later version of Perl 5 you may have available.
=cut