首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google分析API自动登录

问Google分析API自动登录
EN

Stack Overflow用户
提问于 2014-02-12 19:25:58
回答 1查看 3.5K关注 0票数 0

我有一个面板,我正在我的公司开发,我将显示用户的信息,从谷歌分析,但我不希望用户授权或登录他的帐户,每次他来到面板。

我想做的是:第一次使用我的面板,他会连接他的谷歌账户,我会保存一些信息,下一次他在我的面板上连接时,我会用这个保存的信息登录到他的账户上,这样我就可以在不需要他许可的情况下列出分析信息,即使他现在还没有连接到谷歌账户。

基本上,我会自动登录他的帐户,并允许“应用程序”显示信息。

我已经有一些代码连接在API上,如果他连接上的是谷歌帐户,但当他不是,我得到登录屏幕,他必须提供他的电子邮件密码。

到目前为止,我得到的是:

代码语言:javascript
复制
<?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);
}
?>

有什么办法吗?我到处找它,却找不到它附近的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 07:48:54

在google中,当用户第一次进行身份验证时,您会收到一个代码(我想您已经得到了)。使用此代码获取刷新令牌(生存期为(始终),直到和除非用户撤销权限)。将此刷新令牌保存在数据库中以供进一步使用。Refresh令牌用于获取访问令牌(生存期很短,返回在参数的expires中)。访问令牌是让您在一段时间内访问用户的数据。当您需要访问用户数据时,您可以继续使用刷新令牌来获取访问令牌。

每当您想访问用户数据时,请使用刷新令牌获取访问令牌,然后使用该访问令牌获取用户数据。

在您的示例中,您使用的是google客户端,您可以在Client.php中使用以下方法:

getAccessToken()-第一次获得刷新令牌。当您调用此方法时,您将得到一个表单中的json :让这个json名称为$accessToken

代码语言:javascript
复制
$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://developers.google.com/accounts/docs/OAuth2WebServer

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21737673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档