致命错误:在数组上调用成员函数getAttributes()

时间:2017-02-07 00:18:13

标签: php google-authentication

我一直在做这个谷歌身份验证教程,以更好地了解如何使用谷歌登录API,我最近收到此错误:

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

每当我尝试时都会发生:

$this->client->verifyIdToken()->getAttributes();
getPayload()函数中的

。我不知道为什么会这样。我的配置是Windows 10,我使用WAMP服务器来运行此应用程序。任何帮助将不胜感激。

<?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();
}
}
?>

1 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。 从我似乎理解的,

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

是一种过时的方式来访问应该返回谷歌帐户信息的数组(即在运行此行之后,$ attributes应该是一个数组,其中包含与该令牌对应的Google帐户的所有信息。)< / p>

试试这个

$this->client->verifyIdToken();

似乎在最新的api(到目前为止)中,这一行本身返回一个包含预期信息的数组(这就是你添加->getAttributes()时出错的原因,因为这个函数是在数组上调用时无效。) 所以只需在上面运行这一行来生成数组,如果你想看到这些值,就把它放在echo中,如下所示

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

如果您没有看到任何显示的数组,可能是您有一个 header('Location: url') 在执行此回声后立即重定向到另一个URL地址的某个地方,因此它永远不会显示。 (或die

您还可以通过

直接访问emailnamegiven_namefamily_name等特定属性
$this->client->verifyIdToken()['email'];
$this->client->verifyIdToken()['name'];
//so on

希望这可以提供帮助。