我一直在做这个谷歌身份验证教程,以更好地了解如何使用谷歌登录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();
}
}
?>
答案 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
)
您还可以通过
直接访问email
,name
,given_name
,family_name
等特定属性
$this->client->verifyIdToken()['email'];
$this->client->verifyIdToken()['name'];
//so on
希望这可以提供帮助。