2017-02-07 2 views
3

Ich habe diesen Google-Authentifizierung Tutorial wurde es besser zu verstehen, wie die Google-signin api verwenden, und ich habe vor kurzem diesen Fehler erhalten:Fatal error: Call auf eine Elementfunktion getAttributes() auf Array

Fatal error: Call to a member function getAttributes() on array. 

Es tritt auf, wenn ich versuche:

$this->client->verifyIdToken()->getAttributes(); 

in der getPayload() Funktion. Ich weiß nicht, warum das passiert. Meine Konfiguration ist Windows 10 und ich verwende WAMP-Server, um diese Anwendung auszuführen. Jede Hilfe wäre willkommen.

<?php class GoogleAuth { 
private $db; 
private $client; 
public function __construct(Google_Client $googleClient) 
{ 
    $this->client = $googleClient; 
    $this->client->setClientId('234sfsdfasdfasdf3223jgfhjghsdsdfge3.apps.googleusercontent.com'); 
    $this->client->setClientSecret('fD5g4-B6e5dCDGASefsd-'); 
    $this->client->setRedirectUri('http://localhost:9080/GoogleSigninTutorial/index.php'); 
    $this->client->setScopes('email'); 
} 

public function checkToken() 
{ 
    if(isset($_SESSION['access_token']) && !empty($_SESSION['access_token'])) 
    { 
    $this->client->setAccessToken($_SESSION['access_token']); 
    } 
    else 
    { 
    return $this->client->createAuthUrl(); 
    } 
    return ''; 
} 

public function login() 
{ 
    if(isset($_GET['code'])) 
    { 
    $this->client->authenticate($_GET['code']); 
    $_SESSION['access_token'] = $this->client->getAccessToken(); 
    return true; 
    } 
    return false; 
} 

public function logout() 
{ 
    unset($_SESSION['access_token']); 
} 

public function getPayload() 
{ 
    return $this->client->verifyIdToken()->getAttributes(); 
} 
} 
?> 

Antwort

5

Ich habe das gleiche Problem hatte. Von dem, was ich zu verstehen schien,

$attributes = $this->client->verifyIdToken()->getAttributes(); 

ist eine veraltete Möglichkeit, die Anordnung der Informationen des Google-Konto (dh nach dem Ausführen dieser Linie wurde $ Attribute erwartet, dass sie ein Array mit allen soll den Zugriff zurückzukehren Informationen des google-Konto auf dem Token entspricht.)

dieses Versuchen Sie stattdessen

$this->client->verifyIdToken(); 

Es scheint, dass in der aktuellen api (bisher), diese Linie in sich ein Array mit den erwarteten Daten zurückgibt (das ist warum yo Sie erhalten einen Fehler, wenn Sie ->getAttributes() hinzufügen, da diese Funktion nicht gültig ist, wenn sie für ein Array aufgerufen wird.) Führen Sie einfach diese Zeile oben aus, um das Array zu generieren, und fügen Sie es in echo ein, wenn Sie die Werte sehen möchten.

echo '<pre>', print_r($attributes), '</pre>'; 

Wenn du nicht Array angezeigt sehen, kann es sein, dass Sie eine header('Location: url') irgendwo, das Recht auf eine andere URL-Adresse wird Umleitung nach diesen Echo ausgeführt wird, es also nie zeigt. (Oder ein die)

Sie können auch direkt bestimmte Attribute zugreifen wie email, name, given_name, family_name von

$this->client->verifyIdToken()['email']; 
$this->client->verifyIdToken()['name']; 
//so on 

Hoffnung tun dies helfen kann.

+1

Danke !!! Sparte mir Zeit! Nur eine Sache, wenn die Festlegung der Bereiche angeben, was Sie wollen ... überprüfen Sie hier ... http: //stackoverflow.com/questions/14007560/get-userinfo-from-google-oauth-2-0-php-api – Albeis

+0

Guter Punkt Albeis! Außerdem können Sie hier alle Bereiche finden https://developers.google.com/identity/protocols/googlescopes Verwenden Sie einfach Strg + F (Cmd + F), um nach einem bestimmten Schlüsselwort im gewünschten Bereich zu suchen sicher, wie es bezeichnet wird. – user

Verwandte Themen