Login mit Facebook mit Facebook SDK für PHP
Habe ich Probleme mit login auf meiner Website mit Facebook.
Habe ich erstellt login mit Facebook SDK nach dem tutorial an developers.facebook.com ,, aber es funktioniert nicht für mich.
Ich schrieb eine einfache test-Seite, um herauszufinden, was schief geht. Dies ist der code:
<!DOCTYPE html>
<html>
<head></head>
<body>
<pre>
<?php
$app_id = '446458238729594';
$app_secret = '********';
$redirect_uri = 'http://mysite.localhost/';
try {
echo( 'Including "facebook.php"...' );
require './src/facebook.php';
echo( "done.\n\n" );
echo( 'Starting session...' );
$result = session_start();
if( $result ) {
echo( "done.\n\n" );
echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true )
. "\n\n" );
} else {
echo( "fail.\n\n" );
echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true )
. "\n\n" );
}
echo( "Trying to get counter from the session...\n");
if( isset( $_SESSION['counter'] ) ) {
echo( 'Value: ' . $_SESSION['counter'] . "\n" );
echo( "Increasing to one...\n");
$_SESSION['counter']++;
echo( "done.\n" );
echo( 'Value: ' . $_SESSION['counter'] . "\n\n" );
} else {
echo( "fail.\n" );
echo( "Trying to add a counter and set it's value to 0...\n");
$_SESSION['counter'] = 0;
echo( 'Value: ' . $_SESSION['counter'] . "\n" );
echo( "done.\n\n" );
}
echo( 'Creating an instance of Facebook class...' );
$facebook = new Facebook(
array(
'appId' => $app_id,
'secret' => $app_secret,
)
);
echo( "done.\n\n" );
echo( "The instance of Facebook class:\n" . str_replace( $app_secret,
'>>>APP_SECRET<<<', var_export( $facebook, true ) ) . "\n\n" );
echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true )
. "\n\n" );
echo( 'Trying to get user ID...' );
$user_id = $facebook->getUser();
echo( "done.\n\n" );
echo( "User ID:\n" . var_export( $user_id, true ) . "\n\n" );
echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true )
. "\n\n" );
echo( 'Trying to get user profile info...' );
try {
$user_profile = $facebook->api( '/me' );
echo( "done.\n\n" );
echo( "User profile info:\n" . var_export( $user_profile, true )
. "\n\n" );
} catch( Exception $exception ) {
echo( "fail. Probably user is not logged in.\n\n" );
echo( "Exception:\n--------\n" . str_replace( $app_secret,
'>>>APP_SECRET<<<', var_export( $exception, true ) )
. "\n--------\n\n" );
$user_id = null;
echo( "User ID is now NULL.\n\n" );
}
echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true )
. "\n\n" );
if( $user ) {
echo( 'Seems like user is logged in. Getting logout url...' );
$url = $facebook->getLogoutUrl();
echo( "done.\n\n" );
} else {
echo( 'Seems like user is NOT logged in. Getting login url...' );
$url = $facebook->getLoginUrl(
array(
'scope' => 'read_stream, publish_stream, user_birthday,'
. ' user_location, user_work_history, user_hometown,'
. ' user_photos',
'redirect_uri' => $redirect_uri,
)
);
echo( "done.\n\n" );
}
echo( 'URL:<br></pre><a href=' . $url .">Login /Logout</a><pre>\n\n" );
echo( "\n=====>>>>> Session array:\n"
. var_export( $_SESSION, true ) . "\n\n" );
if( $user ) {
echo( 'Seems like user is still logged in. Trying to get some profile'
. ' info...' );
echo( "\nCreating request...\n" );
$queries = array(
array(
'method' => 'GET',
'relative_url' => '/' . $user,
),
array(
'method' => 'GET',
'relative_url' => '/' . $user . '/home?limit=50',
),
array(
'method' => 'GET',
'relative_url' => '/' . $user . '/friends',
),
array(
'method' => 'GET',
'relative_url' => '/' . $user . '/photos?limit=6',
),
);
echo( "Request:\n\n" . var_export( $queries, true ) . "\n\n" );
echo( "\nEncoding request using JSON format...\n" );
$queries_encoded = json_encode( $queries );
echo( "Encoded request:\n\n" . var_export( $queries_encoded, true )
. "\n\n" );
try {
echo( "\nTrying to get response...\n" );
$response = $facebook->api( '?batch=' . $queries_encoded, 'POST' );
echo( "Response:\n\n" . var_export( $response, true ) . "\n\n" );
echo( "\nTrying to decode response...\n" );
echo( "\n" . json_decode( $response[0]['body'], true ) . "\n" );
echo( "\n" . json_decode( $response[1]['body'], true ) . "\n" );
echo( "\n" . json_decode( $response[2]['body'], true ) . "\n" );
echo( "\n" . json_decode( $response[3]['body'], true ) . "\n" );
echo( "\n\ndone.\n\n" );
} catch( Exception $exception ) {
echo( "fail.\n\n" );
echo( "Exception:\n--------\n\n" . str_replace( $app_secret,
'>>>APP_SECRET<<<', var_export( $exception, true ) )
. "\n--------\n\n" );
}
} else {
echo( 'Seems like user is still NOT logged in. At now we can\'t do'
. ' anything. Try to login using the URL above.' );
}
echo( "\n\n========\n\nSession array:\n" . var_export( $_SESSION, true )
. "\n\n" );
} catch( Exception $exception ) {
echo( "\n\n\nAn exception have been trown:\n--------\n\n" . str_replace(
$app_secret, '>>>APP_SECRET<<<', var_export( $exception, true ) )
. "\n--------\n\n" );
echo( "\n\n========\n\nSession array:\n" . var_export( $_SESSION, true )
. "\n\n" );
}
?>
</pre>
</body>
</html>
Nach dem ersten Besuch dieser Seite (ich bin nicht angemeldet bei Facebook), bekomme ich diese Ausgabe:
Including "facebook.php"...done.
Starting session...done.
=====>>>>> Session array:
array (
)
Trying to get counter from the session...
fail.
Trying to add a counter and set it's value to 0...
Value: 0
done.
Creating an instance of Facebook class...done.
The instance of Facebook class:
Facebook::__set_state(array(
'sharedSessionID' => NULL,
'appId' => '446458238729594',
'appSecret' => '>>>APP_SECRET<<<',
'user' => NULL,
'signedRequest' => NULL,
'state' => NULL,
'accessToken' => NULL,
'fileUploadSupport' => false,
'trustForwarded' => false,
))
=====>>>>> Session array:
array (
'counter' => 0,
)
Trying to get user ID...done.
User ID:
0
=====>>>>> Session array:
array (
'counter' => 0,
)
Trying to get user profile info...fail. Probably user is not logged in.
Exception:
--------
FacebookApiException::__set_state(array(
'result' =>
array (
'error_code' => 7,
'error' =>
array (
'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable',
'type' => 'CurlException',
),
),
'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable',
'string' => '',
'code' => 7,
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 967,
'trace' =>
array (
0 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 899,
'function' => 'makeRequest',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => 'https://graph.facebook.com/me',
1 =>
array (
'method' => 'GET',
'access_token' => '446458238729594|>>>APP_SECRET<<<',
),
),
),
1 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 866,
'function' => '_oauthRequest',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => 'https://graph.facebook.com/me',
1 =>
array (
'method' => 'GET',
),
),
),
2 =>
array (
'function' => '_graph',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => '/me',
),
),
3 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 644,
'function' => 'call_user_func_array',
'args' =>
array (
0 =>
array (
0 =>
Facebook::__set_state(array(
'sharedSessionID' => NULL,
'appId' => '446458238729594',
'appSecret' => '>>>APP_SECRET<<<',
'user' => 0,
'signedRequest' => NULL,
'state' => NULL,
'accessToken' => '446458238729594|>>>APP_SECRET<<<',
'fileUploadSupport' => false,
'trustForwarded' => false,
)),
1 => '_graph',
),
1 =>
array (
0 => '/me',
),
),
),
4 =>
array (
'file' => '/srv/www/htdocs/mysite/web/index.php',
'line' => 69,
'function' => 'api',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => '/me',
),
),
),
'previous' => NULL,
))
--------
User ID is now NULL.
=====>>>>> Session array:
array (
'counter' => 0,
)
Seems like user is NOT logged in. Getting login url...done.
URL:
Login / Logout
=====>>>>> Session array:
array (
'counter' => 0,
'fb_446458238729594_state' => '84260edcd60940884d261812496a488c',
)
Seems like user is still NOT logged in. At now we can't do anything. Try to login using the URL above.
========
Session array:
array (
'counter' => 0,
'fb_446458238729594_state' => '84260edcd60940884d261812496a488c',
)
Dann versuche ich den login mit dem angegebenen URL. Es führt mich zu meinen Facebook-app-Genehmigung Seite. Nach der Bestätigung der angeforderten Berechtigungen, es leitet mich zu dieser URL:
http://mysite.localhost/?state=84260edcd60940884d261812496a488c&code=AQDkHPlXXweEiTjXg-sUXwwQAy0_xRYc89Opfz6AF9dlGOomCSG7fjf0440ctHuADKMEG4P7CheeNx9PnwUta-jkfpm03MjDCKyieOZpIPG-evlKYm64mRxD2Q5f_-HJROIC9I_-lHswr5RT3huSQySA55pD28b07Ouv87NqihZ1brGfU-_0LyhcdldtNikb-2xn6NRpa17xEmU37pBqDV1r#_=_
Nach, dass ich erwarte, dass ich eingeloggt bin und meine Seite abruft und zeigt mir einige Infos von meinem Facebook-Profil, aber es funktioniert nicht. Bekomme ich diese Ausgabe:
Including "facebook.php"...done.
Starting session...done.
=====>>>>> Session array:
array (
'counter' => 0,
'fb_446458238729594_state' => '84260edcd60940884d261812496a488c',
)
Trying to get counter from the session...
Value: 0
Increasing to one...
done.
Value: 1
Creating an instance of Facebook class...done.
The instance of Facebook class:
Facebook::__set_state(array(
'sharedSessionID' => NULL,
'appId' => '446458238729594',
'appSecret' => '>>>APP_SECRET<<<',
'user' => NULL,
'signedRequest' => NULL,
'state' => '84260edcd60940884d261812496a488c',
'accessToken' => NULL,
'fileUploadSupport' => false,
'trustForwarded' => false,
))
=====>>>>> Session array:
array (
'counter' => 1,
'fb_446458238729594_state' => '84260edcd60940884d261812496a488c',
)
Trying to get user ID...done.
User ID:
0
=====>>>>> Session array:
array (
'counter' => 1,
)
Trying to get user profile info...fail. Probably user is not logged in.
Exception:
--------
FacebookApiException::__set_state(array(
'result' =>
array (
'error_code' => 7,
'error' =>
array (
'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable',
'type' => 'CurlException',
),
),
'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable',
'string' => '',
'code' => 7,
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 967,
'trace' =>
array (
0 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 899,
'function' => 'makeRequest',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => 'https://graph.facebook.com/me',
1 =>
array (
'method' => 'GET',
'access_token' => '446458238729594|>>>APP_SECRET<<<',
),
),
),
1 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 866,
'function' => '_oauthRequest',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => 'https://graph.facebook.com/me',
1 =>
array (
'method' => 'GET',
),
),
),
2 =>
array (
'function' => '_graph',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => '/me',
),
),
3 =>
array (
'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php',
'line' => 644,
'function' => 'call_user_func_array',
'args' =>
array (
0 =>
array (
0 =>
Facebook::__set_state(array(
'sharedSessionID' => NULL,
'appId' => '446458238729594',
'appSecret' => '>>>APP_SECRET<<<',
'user' => 0,
'signedRequest' => NULL,
'state' => NULL,
'accessToken' => '446458238729594|>>>APP_SECRET<<<',
'fileUploadSupport' => false,
'trustForwarded' => false,
)),
1 => '_graph',
),
1 =>
array (
0 => '/me',
),
),
),
4 =>
array (
'file' => '/srv/www/htdocs/mysite/web/index.php',
'line' => 69,
'function' => 'api',
'class' => 'BaseFacebook',
'type' => '->',
'args' =>
array (
0 => '/me',
),
),
),
'previous' => NULL,
))
--------
User ID is now NULL.
=====>>>>> Session array:
array (
'counter' => 1,
)
Seems like user is NOT logged in. Getting login url...done.
URL:
Login / Logout
=====>>>>> Session array:
array (
'counter' => 1,
'fb_446458238729594_state' => '6ae5ea9e5f7199fb6d19793905dcdd65',
)
Seems like user is still NOT logged in. At now we can't do anything. Try to login using the URL above.
========
Session array:
array (
'counter' => 1,
'fb_446458238729594_state' => '6ae5ea9e5f7199fb6d19793905dcdd65',
)
Bitte helfen Sie mir, herauszufinden, warum der login nicht funktioniert? Warum die Instanz von Facebook-Klasse nicht abrufen-der access token? Und warum ist die Methode Facebook::getUser() gibt immer 0 zurück? Wie kann ich es beheben?
InformationsquelleAutor user1764823 | 2012-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Going to take a stab hier - also Geduld bitte:
Mögliche Ursache 1:
Ihre FB-code sieht gut aus - aber dein Fehler besagt:
"Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Netzwerk ist nicht erreichbar", welche Punkte zu einem cURL-Problem.
Können Sie bestätigen Sie Ihre cURL installiert ist/auf Ihrem webserver? Ein einfaches phpinfo(); werden Sie sagen.
Mögliche Ursache 2:
Überprüfen Sie, ob Ihre app-URL festgelegt ist, zu der Position, die Sie mit der Ausführung der tests aus. Der Umleitungs-URI "http://mysite.localhost/" - so stellen Sie sicher, dass in Ihrem app-setup-Seite, die es entspricht.
Schließlich
einfach mit den Grundlagen beginnen, und starten Sie dann das hinzufügen von zusätzlichem code in. Dies funktioniert für mich:
Danke. Das Problem war die firewall es blockiert externe IPv6-verbindungen von meinem lokalen Netzwerk.
genial @CBroe - schönen Fang.
Ich drücke f5 und Es funktioniert. Nach ein paar Sekunden bekomme ich die Fehlermeldung wieder :S
InformationsquelleAutor Fraccus