我正在建立一个受ajax控制的网站,我在其中使用Google的Javascript SDK对我的用户进行身份验证,并获得对其Google联系人的访问权限。我打算做的是以下几点:
我已经成功完成了这三个步骤的第一步,我可以对用户进行身份验证,并可以访问一个有效期为3600小时的访问令牌,但我无法弄清楚如何验证用户服务器端,而无需将其重定向到任何地方。我也试过使用谷歌PHP SDK,但似乎无法弄清楚如何做到这一点。我确信这在某种程度上是可能的,因为它在Google PHP SDK guide:
中有说明如果我们在Android或Javascript网络客户端上进行了身份验证,我们可能会通过其他方式获取代码。在这种情况下,我们只需要交换它。如果是通过gapi Javascript客户端检索的,我们需要设置重定向URI postmessage。
$client->setRedirectUri($redirect_uri);
唯一的问题是我不明白该怎么做。什么是$ redirect_uri?我没有重定向网址,因为当我实施Javascript SDK时,它说,我不必使用重定向uri,因为Javascript验证是在同一个窗口中完成的,没有重定向(就像我想要的那样)。
我怎样才能解决上面提到的第二步和第三步?我在哪里可以找到一个非hacky或非常非常hacky的教程来实现我想要的结果?
修改
我基本上想要实现的目标是:
使用Javascript SDK
实现了这一目标
Javascript SDK只授予访问令牌,我不想通过ajax调用传递它,因为我觉得这是不安全的
以下是我的PHP文件当前的样子:
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setScopes('https://www.googleapis.com/auth/plus.me');
$client->setRedirectUri($PHP_SELF);
$client->setState('offline');
$authUrl = $client->createAuthUrl();
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$result=$client->getAccessToken();
} else {
header("Location: ".$authUrl);
exit;
}
为了达到我想要的效果,我应该通过Javascript SDK以某种方式获得 $ _ GET ['代码'] 参数,但我不知道如何:
答案 0 :(得分:1)
经过几天的头痛之后我也想出了这个......感谢谷歌什么都没有,你的文件很麻烦。
$client->setRedirectUri($redirect_uri);
$ redirect_uri参数应该是一个字符串:“postmessage”,当通过javascript进行身份验证时,你应该要求代码而不是TOKEN,然后将其发送到服务器端脚本,进行身份验证并交换令牌
gapi.auth.authorize({client_id: googleApi.clientId, scope: googleApi.scopes, response_type: 'code', immediate: true}, g_handleAuthResult);