Моя проблема в том, что переменная $info
, которая запрашивает данные пользователя, не предоставляет адрес электронной почты. Вы можете видеть в моем fblogin()
коде, который я использую email scope
. Если вы посмотрите здесь: debug($info->as_json);
он содержит только {"Name":"somename","id":"someid"}
Я попытался сбросить $access_data
как:
foreach $key (keys %access_data) {
debug("$key $access_data{$key}");
}
, но, похоже, это не сработало правильно.
Вот моя функция отладки:
sub debug {
my $str=shift;
my @lt=localtime(time());
my $ts=sprintf("%d%2.2d%2.2d %2.2d:%2.2d",@lt[5]+1900,@lt[4]+1,@lt[3],@lt[2],@lt[1]);
open(FD,">>/file");
print FD "[$ts] $str\n";
close(FD);
}
Любая помощь будет принята с благодарностью
sub fblogin(){
my $fb = Net::Facebook::Oauth2->new(
application_id => 'XXXX',
application_secret => 'XXXX',
callback => 'URL'
);
# get the authorization URL for your application
my $url = $fb->get_authorization_url(
scope => [ 'email' ],
display => 'page'
);
print "Location: $url\n\n";
}
sub fbcallback(){
my $fb = Net::Facebook::Oauth2->new(
application_id => 'XXXX',
application_secret => 'XXXX',
callback => 'URL'
);
my $query=new CGI;
my $code = $query->param('code');
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}->@*
my $info = $fb->get(
'https://graph.facebook.com/v3.1/me' # Facebook API URL
);
debug($info->as_json);
}
} catch {
# handle errors here!
}
}