it-swarm.com.de

Facebook Login: So kombinieren Sie JavaScript mit PHP SDK?

Wie gehe ich vor, um Beispiele aus beiden zu kombinieren?

https://github.com/facebook/php-sdk/blob/master/examples/example.php und https://github.com/facebook/connect-js/blob/master/examples/ jquery/login.html

Das Endziel ist, dass wir uns mit jQuery anmelden können, und irgendwie würde die folgende Zeile immer noch funktionieren

$user = $facebook->getUser();

Was ich derzeit bemerke, ist, dass wenn ich mich mit JavaScript anmelde, die Sitzung nicht mit PHP festgelegt wird und daher nicht mit PHP-basiertem SDK kompatibel ist (also wäre $ user in diesem Fall immer noch null).

Ich bin kein großer Fan von <a href="$facebook->getLoginUrl()">Login with Facebook</a>, da der Browser eine andere Seite lädt (das Facebook-Login) und dann zurück zur Web-App umleitet. Es ist weitaus idealer, wenn ich ein Popup-Fenster für die Anmeldung des Benutzers laden und dann transparent zu meiner Web-App zurückleiten kann. Vorschläge, wie ich diese Benutzererfahrung implementieren kann, sind daher sehr willkommen. Vielen Dank!

21
Antony

Ich benutze einfach den Facebook Login Button - https://developers.facebook.com/docs/reference/plugins/login/

Sobald der Benutzer sich damit angemeldet hat (sofern dies noch nicht geschehen ist) und Zugriff auf Ihre App (Website) gewährt hat, sollte das PHP-SDK keine Probleme mit der Verwendung der Facebook-Sitzung und der APIs haben.

Aktualisieren

Ich habe es gerade mit dem neuen SDK der Version 3.0 PHP versucht und es funktioniert definitiv nicht . Fand dies auf dem Entwickler-Blog

Wenn Sie das JavaScript SDK für die Anmeldung in Verbindung mit dem PHP SDK verwenden, müssen Sie auf die Aktualisierung des JavaScript SDK warten (in 4 Wochen). Version 3.0.0 des PHP SDK kann aufgrund der Änderung des Cookie-Formats nicht mit dem aktuellen JavaScript SDK zusammenarbeiten.

Verwenden Sie mit anderen Worten das SDK v2 PHP, bis das JS-SDK aktualisiert ist.

12
Phil

Ich bin mir nicht sicher, ob das funktioniert. Die aktuelle JS-API verfügt über eine Konfiguration zum Speichern des Cookies, damit der Server es lesen kann:

FB.init({
    appId  : 'YOUR APP ID',
    cookie : true
});

In PHP können Sie nun Folgendes tun, um die Sitzung von JS aus zu verwenden:

// Read the cookie created by the JS API
$cookie = preg_replace("/^\"|\"$/i", "", $_COOKIE['fbs_' . FB_APP_ID]);
parse_str($cookie, $data);

// Startup the Facebook object
$fb = new Facebook(array(
    'appId'  => FB_APP_ID,
    'secret' => FB_APP_SECRET
));

// Say we are using the token from the JS
$fb->setAccessToken($data['access_token']);

// It should work now
var_dump($fb->getUser());

Hoffe es hat geholfen.

15

es hört sich so an, als ob Facebook dieses Problem nicht zum richtigen Zeitpunkt behoben hat (während sie über https://developers.facebook.com/blog/post/503 sprechen).

dies ist die neueste Information über js sdk https://developers.facebook.com/blog/post/525/

1
thereds1106

Nach langen Stunden des Suchens stellte ich fest, dass dies mein Problem behebt, bei dem das SDK PHP die Facebook-Sitzung nicht aufnahm. Anscheinend legt das Javascript SDK die Sitzung nicht richtig fest. Fügen Sie dies zu Ihrem auth.login eventlistener hinzu:

FB.Event.subscribe('auth.login', function(response) {
    FB._oauth = false;
    FB.Cookie.setEnabled(true);
    FB.Auth.setSession(response.authResponse, response.status);
    FB._oauth = true;
    window.location.reload();
});

Stellen Sie außerdem sicher, dass die App-Domain mit Ihrer Cookie-Domain übereinstimmt. Nach dem Reparieren dieser Gegenstände funktionierte es schließlich.

Edit: Heute Morgen hat alles gut funktioniert. Als ich gerade weitere Tests durchführte, stellte ich fest, dass ich base_facebook.php bearbeiten musste, um sicherzustellen, dass die Anfragen an Facebook keine Zeitüberschreitung erfahren. Ich vermute, dass die Verbindung nicht schnell genug ist, um rechtzeitig hergestellt zu werden, da ich sie auf meinem lokalen Computer teste. Dies erklärt das seltsame Verhalten, wo es manchmal und manchmal nicht funktionieren würde.

Ändern Sie das Connecttimeout im Array $ CURL_OPTS in Zeile 128:

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 20,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.1',
);
1
Rick Pastoor

In Version 4 des SDK funktioniert es automatisch mit dem JavaScript SDK. Sie müssen nur FacebookJavaScriptLoginHelper verwenden:

$helper = new FacebookJavaScriptLoginHelper(); // Get access token from JS SDK
try {
    $session = $helper->getSession();
} catch(FacebookRequestException $e) {
    // When Facebook returns an error
    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();
} catch(\Exception $e) {
    // When validation fails or other local issues
    echo "Exception occured, code: " . $e->getCode();
    echo " with message: " . $e->getMessage();
}

// If logged in
if($session) {
    // Get user profile
    try {
        $user_profile = (new FacebookRequest(
            $session, 'GET', '/me'
        ))->execute()->getGraphObject(GraphUser::className());

        print_r($user_profile);

    } catch(FacebookRequestException $e) {

        echo "Exception occured, code: " . $e->getCode();
        echo " with message: " . $e->getMessage();
    }
}

Keine Notwendigkeit, mit Keksen rumzuspielen!

0
Chuck Le Butt