2013-11-25 162 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。

希望有所帮助。