Heim >Backend-Entwicklung >PHP-Tutorial >Warum gibt das PHP SDK „getUser()' von Facebook immer 0 zurück?

Warum gibt das PHP SDK „getUser()' von Facebook immer 0 zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-11-22 07:53:09689Durchsuche

Why Does Facebook's PHP SDK `getUser()` Always Return 0?

Warum gibt das Facebook PHP SDK getUser() immer 0 zurück?

Bei der Entwicklung von Webanwendungen, die mit Facebook interagieren, tritt häufig das Problem auf, dass getUser() ständig 0 zurückgibt angetroffen. Dies kann den Zugriff auf notwendige Benutzerinformationen behindern und zu Authentifizierungsfehlern führen.

Ein möglicher Grund für dieses Verhalten liegt in der Abhängigkeit des PHP SDK von der Variablen $_REQUEST, die möglicherweise nicht korrekt mit anderen Anforderungsvariablen ($ _GET, $_POST und $_COOKIE) in Ihrer Umgebung. Auch die PHP-Version kann eine Rolle spielen.

Eine Überprüfung der Funktion getCode() in der Datei base_facebook.php zeigt den folgenden Code:

protected function getCode() {
    if (isset($_REQUEST['code'])) {
        if ($this->state !== null &&
                isset($_REQUEST['state']) &&
                $this->state === $_REQUEST['state']) {

            // CSRF state has done its job, so clear it
            $this->state = null;
            $this->clearPersistentData('state');
            return $_REQUEST['code'];
        } else {
            self::errorLog('CSRF state token does not match one provided.');
            return false;
        }
    }

    return false;
}

Um dieses Problem zu beheben, können wir dies ändern Funktion wie folgt:

protected function getCode() {
    $server_info = array_merge($_GET, $_POST, $_COOKIE);

    if (isset($server_info['code'])) {
        if ($this->state !== null &&
                isset($server_info['state']) &&
                $this->state === $server_info['state']) {

            // CSRF state has done its job, so clear it
            $this->state = null;
            $this->clearPersistentData('state');
            return $server_info['code'];
        } else {
            self::errorLog('CSRF state token does not match one provided.');
            return false;
        }
    }

    return false;
}

Diese Änderung konsolidiert alle Anforderungsvariablen in der Variablen $server_info, wodurch sichergestellt wird, dass die Funktion getCode() auf den Codeparameter zugreifen kann eine dieser Quellen, unabhängig von der Konfiguration Ihrer PHP-Umgebung.

Das obige ist der detaillierte Inhalt vonWarum gibt das PHP SDK „getUser()' von Facebook immer 0 zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn