2012-06-19 25 views
0

的login.php故障排除谷歌的OAuth 2.0 - 不正確的查詢分離從谷歌的服務器

<?php 
    define('client_id', 'cid'); 
    define('redirect_uri', 'http://domain.tld/file.php'); 
    define('client_secret', 'secret'); 


    $endpoint = 'https://accounts.google.com/o/oauth2/auth'; 
    $querystr = array(
     'response_type' => 'token', 
     'client_id' => client_id, 
     'redirect_uri' => redirect_uri, 
     'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 
#  'state' => $_SERVER['REQUEST_URI'] 
    ); 


    if (isset($_GET['access_token'])) 
     print_r($_GET); 
    else 
     header('Location: ' . $endpoint . '?' . http_build_query($querystr)); 

?> 

上面的代碼工作正常,我遇到的問題是,我從谷歌獲得的性反應是沒有很好地形成。我從他們那裏得到的查詢字符串不是以問號?開頭,它以數字符號#開頭。以下是來自Google服務器的示例returend。

http://domain.tld/file.php#access_token=ya29.AHES6ZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno&token_type=Bearer&expires_in=3600

爲什麼由數字符號分開的文件路徑的查詢字符串?這是因爲我沒有使用https模式,它懲罰我?

回答

1

不。它被稱爲URL的「散列」。對於從服務器到客戶端的響應(並且反之亦然而不是),這是常用方案。例如,Facebook OAuth 2.0也使用這種技術。只需習慣它,並解釋從散列符號開始的響應。

+0

我將responce_type改爲代碼並得到了一個普通的查詢字符串。感謝您的幫助!我不知道這是正常的。你可以添加一些細節,說明他們爲什麼使用URL的哈希值? –

+0

我不知道確切的原因;我猜?更多表示對服務器的查詢。 – 2012-06-19 17:17:20

+0

好的,非常感謝! –