2013-11-25 271 views
0

我根本不明白整個OAuth認證的工作原理,而且我幾乎陷入了困境。我試圖讓用戶使用Google PHP客戶端API向我的服務器驗證他/她的YouTube帳戶。YouTube API OAuth無效請求

這裏是我當前的代碼:

<?php 
require_once app_path().'/google-apis/Google_Client.php'; 
require_once app_path().'/google-apis/contrib/Google_YouTubeService.php'; 
class SignupController extends BaseController { 

    public function showSignupForm() { 
     $client = new Google_Client(); 
     $client->setClientId('CLIENTID'); 
     $client->setClientSecret('CLIENTSECRET'); 
     $client->setAccessType('offline'); 
     $client->setDeveloperKey('DEVKEY'); 

     $youtube = new Google_YoutubeService($client); 
     $client->authenticate(Input::get('code')); 

     $token = json_decode($client->getAccessToken()); 

     return View::make('signup')->with('google_token', $token->access_token); 
    } 
    public function getYTAccess() { 
     $client = new Google_Client(); 
     $client->setClientId('CLIENTID'); 
     $client->setClientSecret('CLIENTSECRET'); 
     $client->setAccessType('offline'); 
     $client->setDeveloperKey('DEVKEY'); 
     $client->setRedirectUri('REDIRECT_URI'); 
     $youtube = new Google_YoutubeService($client); 

     $authUrl = $client->createAuthUrl(); 
     return View::make('connect_youtube')->with('authUrl', $authUrl);; 
    } 

} 
?> 

這是在基於Laravel應用程序我建立了SignupController的代碼。相關的路線如下:

Route::get('signup/connect_youtube/return', '[email protected]'); 
Route::get('signup', '[email protected]'); 

我只被重定向到我的應用程序後,得到一個無效的請求錯誤,我知道它是與訪問令牌,只是不知道是什麼。

任何幫助,將不勝感激。

感謝

托比亞斯Timpe (省略祕密,很明顯)

回答

1

簡單地說,有2個步驟(至少)你要做的: 1.傳遞正確的參數,以谷歌。參數告訴你1.你是誰(你需要提供你的客戶端ID和客戶端密碼),2.你要求什麼(在你的情況下,youtube範圍)3. redirect_uri這是你的用戶在接受後將被重定向到的地方您應用的請求。 4.其他選項,如access_type = offline,指定您有後端服務器來繼續驗證流程。

要檢查此步驟是否正常工作,您並不總是需要運行代碼。只需打印出sdk爲您製作的auth_url即可。我提到的所有參數都應該嵌入在那裏。在瀏覽器中複製粘貼網址,如果參數正確,它會將您帶到Google的同意頁面。如果不是,很可能是因爲您在Google Apis設置頁面中設置的參數與您在auth_url中編寫的參數不匹配。示例是不匹配的域,redirect_uris,client_ids,client_secrets。我不確定這是否是您收到的錯誤。

如果您的參數很好,Google會讓您的用戶登錄並允許您的應用('同意')訪問youtube。它會將用戶的瀏覽器重定向到您指定的'redirect_uri'參數代碼=。所以這會讓你進入你的服務器腳本必須處理的第2步。

  1. 谷歌在參數代碼中拍攝的值是您獲取訪問令牌所需的值。所以你的服務器路由(redirect_uri)需要提取代碼參數並傳遞給谷歌API來交換'憑據'。請注意,授權碼只能使用一次。響應憑據將包含access_token和refresh_token。這些對於api調用非常重要,因此您需要將它們存儲在存儲器中,可能使用的是您正在使用的谷歌sdk。

希望有所幫助。

相關問題