Perl - цикл API Authentication Graph

I want to get FB-user data via the Graph API (with Perl).
I have an facebook-application, configured as "Website with FB Login".
I'm using Net::Facebook::Oauth2

the app is configured with a callbackurl like this: "http://localhost/myfile.pl"

Когда я открываю localhost/myfile.pl, он позволяет мне войти в facebook, а также предоставить приложению доступ к моим данным. Но когда дело доходит до того, что он должен отступить и получить токен доступа (по крайней мере, я думаю, что то, что он должен делать дальше), он заканчивается бесконечным циклом.

http://localhost/myfile.pl contains the following:

#!"C:\strawberry\perl\bin\perl.exe"
use CGI::Carp qw(fatalsToBrowser);  # this makes perl showing (syntax) errors in browser

use CGI;
    my $cgi = CGI->new;

    use Net::Facebook::Oauth2;

    my $fb = Net::Facebook::Oauth2->new(
        application_id => 'xxxMY_APP_IDXXX', 
        application_secret => 'xxxMY_SECRETxxx',
        callback => 'http://localhost/myFile.pl'
    );

    ###get authorization URL for your application
    my $url = $fb->get_authorization_url(
        scope => ['offline_access','publish_stream'],
        display => 'page'
    );

    ####now redirect to this url
    print $cgi->redirect($url);

    ##once user authorizes your application facebook will send him/her back to your application
    ##to the callback link provided above

    ###in your callback block capture verifier code and get access_token

    my $fb = Net::Facebook::Oauth2->new(
        application_id => 'xxxMY_APP_IDxxx',
        application_secret => 'xxxMY_SECRETxxx',
        callback => 'http://localhost/myFile.pl'
    );

    my $access_token = $fb->get_access_token(code => $cgi->param('code'));
    ###save this token in database or session

    ##later on your application you can use this verifier code to comunicate
    ##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/me' ##Facebook API URL
    );

    print $info->as_json;

Я что-то делаю неправильно в скрипте Perl? Или это из-за локального хоста для моего обратного вызова?

Спасибо заранее,
Кристоф Трди

2
nl ja de
Какую ошибку/сообщение вы получили после запуска этого скрипта?
добавлено автор Krishnachandra Sharma, источник

1 ответы

Вы должны использовать параметр для остановки бесконечных циклов. В основном, приложение authtenticate для FB затем вызывает тот же скрипт снова, он видит, что он authtenticated и петли навсегда.

if ( ! defined $cgi->param('code') ){
  my $access_token = $fb->get_access_token(code => $cgi->param('code'));
  my $fb = Net::Facebook::Oauth2->new(
    application_id => 'xxxMY_APP_IDxxx',
    application_secret => 'xxxMY_SECRETxxx',
    callback => "http://localhost/myFile.pl";
  );
  ###get authorization URL for your application
  my $url = $fb->get_authorization_url(
    scope => ['offline_access','publish_stream'],
    display => 'page'
  );

  ####now redirect to this url
  print $cgi->redirect($url);

} else {
  ##later on your application you can use this verifier code to comunicate
  ##with facebook on behalf of this user
  my $access_token = $fb->get_access_token(code => $cgi->param('code'));
  my $fb = Net::Facebook::Oauth2->new(
    access_token => $access_token
  );

  my $info = $fb->get(
    'https://graph.facebook.com/me' ##Facebook API URL
  );

  print $info->as_json;
}
2
добавлено
хорошо спасибо в первую очередь. но у меня все еще проблема со сценарием выше. я думаю, что вторая строка должна быть перемещена в другое место. это говорит о неопределенной стоимости. Я думаю, это потому, что $ fb еще не определен в строке 2. Я переместил его и разместил сразу после моей $ fb вещи. теперь я получил еще одно сообщение об ошибке: хорошо спасибо в первую очередь. но у меня все еще проблема с моим скриптом. я думаю, что вторая строка должна быть перемещена в другое место. это говорит о неопределенной стоимости. Я думаю, это потому, что $ fb еще не определен в строке 2. Я переместил его и разместил сразу после моей $ fb вещи. теперь я получил еще одно сообщение об ошибке.
добавлено автор user2020927, источник
Вы должны передать параметр кода с помощью Oauth v2.0 на странице localhost/myFile.pl .
добавлено автор user2020927, источник
Modern::Perl
Modern::Perl
362 участник(ов)

Пожалуйста, представьтесь при добавлении в группу. Это необходимо во избежание спам-ботов. Ваше первое сообщение не должно быть ссылкой или репостом. Мы всегда рады нестандартным вопросам.

use Perl or die;
use Perl or die;
164 участник(ов)

Группа о языке Perl и обо всём что с ним связано.

pro.perl
pro.perl
22 участник(ов)

Язык программирования Perl