【问题标题】:YouTube API OAuth invalid requestYouTube API OAuth 无效请求
【发布时间】:2013-11-25 19:39:15
【问题描述】:

我根本不明白整个 OAuth 身份验证的工作原理,我几乎被困住了。我正在尝试让用户使用 Google PHP Client API 向我的服务器验证他/她的 YouTube 帐户。

这是我当前的代码:

<?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', 'SignupController@showSignupForm');
Route::get('signup', 'SignupController@getYTAccess');

在重定向到我的应用程序后,我只收到一个无效请求错误,我知道它与访问令牌有关,只是不知道是什么。

任何帮助将不胜感激。

谢谢

托拜厄斯·廷佩 (显然省略了秘密)

【问题讨论】:

    标签: php oauth laravel google-api google-api-php-client


    【解决方案1】:

    简而言之,您必须(至少)执行 2 个步骤: 1.将正确的参数传递给google。参数告诉你 1. 你是谁(你需要提供你的客户 ID 和客户密码),2. 你要求什么(在你的情况下是 youtube 范围) 3. redirect_uri 这是你的用户在接受后将被重定向回来的地方您的应用程序的请求。 4. 其他选项,例如 access_type=offline,它指定您有一个后端服务器来继续验证流程。

    要检查此步骤是否正常工作,您并不总是需要运行代码。只需打印出 sdk 为您制作的 auth_url。我提到的所有这些参数都应该嵌入那里。将网址复制粘贴到浏览器中,如果参数正确,会跳转到谷歌的同意页面。如果不是,很可能是因为您在 Google API 设置页面中设置的参数与您在 auth_url 中编写的参数不匹配。例如不匹配的域、redirect_uris、client_ids、client_secrets。我不确定这是否是您收到的错误。

    如果您的参数良好,Google 将允许您的用户登录并允许您的应用访问 youtube 范围(“同意”)。它将使用参数 code= 将用户的浏览器重定向回您指定的“redirect_uri”。因此,这将使您进入服务器脚本必须处理的第 2 步。

    1. 从 Google 获取的参数 ?code 中的值是您获取访问令牌所需的值。所以你的服务器路由(redirect_uri)需要提取code参数并传递给google api来换取'credentials'。请注意,授权码只能使用一次。响应凭证将包含 access_token 和 refresh_token。这些对于 api 调用很重要,因此您需要将它们保存在存储中,可能与您正在使用的 google sdk 一起使用。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2019-10-02
      • 2015-11-01
      • 2011-04-25
      • 1970-01-01
      • 2014-10-10
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多