我有一个面板,我正在我的公司开发,我将显示用户的信息,从谷歌分析,但我不希望用户授权或登录他的帐户,每次他来到面板。
我想做的是:第一次使用我的面板,他会连接他的谷歌账户,我会保存一些信息,下一次他在我的面板上连接时,我会用这个保存的信息登录到他的账户上,这样我就可以在不需要他许可的情况下列出分析信息,即使他现在还没有连接到谷歌账户。
基本上,我会自动登录他的帐户,并允许“应用程序”显示信息。
我已经有一些代码连接在API上,如果他连接上的是谷歌帐户,但当他不是,我得到登录屏幕,他必须提供他的电子邮件密码。
到目前为止,我得到的是:
<?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);
}
?>有什么办法吗?我到处找它,却找不到它附近的东西。
发布于 2014-02-13 07:48:54
在google中,当用户第一次进行身份验证时,您会收到一个代码(我想您已经得到了)。使用此代码获取刷新令牌(生存期为(始终),直到和除非用户撤销权限)。将此刷新令牌保存在数据库中以供进一步使用。Refresh令牌用于获取访问令牌(生存期很短,返回在参数的expires中)。访问令牌是让您在一段时间内访问用户的数据。当您需要访问用户数据时,您可以继续使用刷新令牌来获取访问令牌。
每当您想访问用户数据时,请使用刷新令牌获取访问令牌,然后使用该访问令牌获取用户数据。
在您的示例中,您使用的是google客户端,您可以在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)
要获得更多的清晰性,请查看Client.php并阅读:
https://stackoverflow.com/questions/21737673
复制相似问题