2

Graph API 経由で FB ユーザー データを取得したい (Perl を使用)。
「FBログインのあるWebサイト」として構成されたfacebookアプリケーションがあります。
私はNet::Facebook::Oauth2を使用しています

アプリは、次のような callbackurl で構成されています。"http://localhost/myfile.pl"

localhost/myfile.pl を開くと、Facebook にログインできるようになり、アプリケーションが自分のデータにアクセスできるようになります。しかし、フォールバックしてアクセストークンを取得する必要があるポイントになると(少なくとも、次にすべきことだと思います)、無限ループで終わります。

http://localhost/myfile.pl以下が含まれます。

#!"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 スクリプトで何か間違ったことをしていますか? それとも、コールバックのローカルホストが原因ですか?

前もって感謝します、
クリストフ・トウディ

4

1 に答える 1

2

無限ループの発生を停止するには、パラメーターを使用する必要があります。基本的に、アプリは FB に対して認証を行い、同じスクリプトを再度呼び出すと、認証されたことを確認して永遠にループします。

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;
}
于 2013-01-29T12:54:22.823 に答える