0

我有我在我的公司開發的這個面板,我會從Google Analytics顯示用戶的信息,但我不希望用戶在他每次訪問時授權或使用他的帳戶登錄到面板。谷歌分析API自動登錄

我想要做的是:在第一次使用我的面板時,他會連接他的Google帳戶,我會保存一些信息,並在下次連接我的面板時使用此保存的信息登錄他的帳戶,因此我可以列出Google Analytics(分析)信息,而無需詢問他的許可,或者即使他沒有連接,也列出該信息是Google帳戶。

基本上我會自動登錄他的帳戶,並允許「應用程序」顯示信息。

我已經有一些連接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

您可以使用[刷新令牌(https://developers.google.com/accounts/docs/OAuth2WebServer#離線)或[服務帳戶](https://code.google.com/p/google-api-php-client/wiki/OAuth2#Service_Accounts)。刷新令牌將要求他們登錄並授予訪問權限,然後保存刷新令牌。刷新標記可以被撤消或停止工作,因此請閱讀所有文檔。 –

+0

您是否正在訪問Google分析或其他人Google數據分析? – DaImTo

+0

我正在訪問其他人的數據。 – Terkhos

回答

4

在谷歌Api的,當用戶第一次驗證,你會收到一個代碼(你已經得到我想)。使用此代碼獲取刷新標記(生存期是(總是),直到用戶撤銷權限爲止)。將此刷新標記保存在數據庫中以備將來使用。刷新令牌用於獲取訪問令牌(生命期很短,在expires參數中返回)。訪問令牌可讓您訪問您的用戶數據一段時間。每當需要訪問用戶數據時,您都可以繼續使用刷新令牌來獲取訪問令牌。

每當你想訪問用戶的數據,使用刷新令牌獲取訪問令牌,然後使用該訪問令牌來獲取用戶的數據。

在你的情況,你使用谷歌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訪問令牌。

如需進一步clearity,看Client.php還閱讀:

https://developers.google.com/accounts/docs/OAuth2WebServer

+0

感謝丹麥人,今天下午我會試試這個,我會讓你知道它是否有效。 – Terkhos

+0

好的。讓我,如果你需要任何幫助:) – Danish

+0

感謝丹麥,它的工作就像一個魅力。對不起,我不能滿足你的答案,我沒有足夠的分數,因爲有人低估了我的問題。 – Terkhos