我有这个小组,我正在我的公司开发,我将从Google Analytics中显示用户的信息,但我不希望用户每次进入面板时都要授权或登录他的帐户。< / p>
我想做的是:在第一次使用我的面板时,他会连接他的Google帐户,我会保存一些信息,并且在下次他连接到我的面板时,我会使用这个保存的信息登录他的帐户,以便我可以列出Google Analytics信息,而无需征得他的同意或列出该信息,即使他现在没有连接是Google帐户。
基本上我会自动登录他的帐户并允许'app'显示信息。
我已经有一些连接在API上的代码,如果他连接的是Google帐户,但是当他不是我的登录界面时,他必须提供他的电子邮件密码。
到目前为止我所拥有的是:
<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php';
session_start();
$client = new Google_Client();
$client->setApplicationName("Google Analytics PHP Starter Application");
$client->setClientId('KEY');
$client->setClientSecret('SECRET');
$client->setRedirectUri('RETURN URI');
$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');
$client->setAccessType('offline');
$service = new Google_Service_Analytics($client);
if(isset($_GET['logout']))
{
unset($_SESSION['token']);
}
if(isset($_GET['code']))
{
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if(isset($_SESSION['token']))
{
$client->setAccessToken($_SESSION['token']);
}
if($client->getAccessToken())
{
$props = $service->management_webproperties->listManagementWebproperties("12008145");//~all
print "<h1>Web Properties</h1><pre>" . print_r($props, true) . "</pre>";
$accounts = $service->management_accounts->listManagementAccounts();
//print "<h1>Accounts</h1><pre>" . print_r($accounts, true) . "</pre>";
$segments = $service->management_segments->listManagementSegments();
//print "<h1>Segments</h1><pre>" . print_r($segments, true) . "</pre>";
$goals = $service->management_goals->listManagementGoals("~all", "~all", "~all");
//print "<h1>Goals</h1><pre>" . print_r($goals, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken();
}
else
{
$authUrl = $client->createAuthUrl();
header("Location: " . $authUrl);
}
?>
有没有办法做到这一点?我到处寻找它并且找不到附近的东西。
答案 0 :(得分:4)
在谷歌Api中,当用户第一次进行身份验证时,您会收到一个代码(我猜你已经得到了代码)。使用此代码获取刷新令牌(生命周期是(始终),直到并且除非用户撤消权限)。将此刷新令牌保存在数据库中以供进一步使用刷新令牌用于获取访问令牌(生命周期很短,在参数的expires中返回)。访问令牌可让您在一段时间内访问用户的数据。每当您需要访问用户的数据时,您都可以继续使用刷新令牌来获取访问令牌。
每当您想要访问用户的数据时,请使用刷新令牌获取访问令牌,然后使用该访问令牌获取用户的数据。
在您的情况下,您使用的是google api php客户端,您可以在Client.php中使用方法,如:
getAccessToken() ---第一次获取刷新令牌。当你调用这个方法时,你会在表单中找到一个json:让这个json名称为$ accessToken
$accessToken = {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
"expires_in":3600,"id_token":"TOKEN", "created":1320790426}
解析json以获取refresh_token($ refreshToken = $ accessToken.refresh_token)并保存以供以后使用。
setAccessToken($ accessToken) ---调用此方法设置OAuth访问令牌。
refreshToken($ refreshToken) ---使用给定的刷新令牌获取新的OAuth访问令牌。
为了进一步明确,请查看Client.php并阅读: