小编elu*_*ong的帖子

为什么我一直在为invalid_grant捕获Google_Auth_Exception?

我正在尝试构建一个访问Google AnalyticsAPI并提取数据的网络应用.但是,我在OAuth 2.0授权方面遇到了一些问题.

它允许成功的初始访问,但是当我点击刷新页面的提交按钮时,它会迅速将我踢出并抛出Google_Auth_Exception,并显示错误"获取OAuth2访问令牌时出错,消息:'invalid_grant''.

据我了解OAuth 2.0,验证有4个步骤:

  1. 从Google Dev Console获取OAuth 2.0凭据
  2. 从Google Authorization Server获取访问令牌
  3. 将访问令牌发送到Google AnalyticsAPI
  4. 如有必要,刷新访问令牌

据我所知,$ client-> setAccessToken(); 自动刷新令牌.

自从他们转移到Github之后,我似乎无法找到谷歌的任何文档,而且我大部分都遵循了他们的示例结构.

当它尝试执行$ client-> authenticate($ _ GET ['code'])时,从第一个try块抛出错误;

我目前的解决方法是取消设置会话令牌,并让用户重新授权.但是,这非常麻烦和干扰,因为与页面的任何交互都会要求重新授权.

任何帮助将不胜感激!

这是我的代码:

<?php

    /**********************
    OAUTH 2.0 AUTHORIZATION
    ***********************/

    //required libraries
    set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
    require_once 'Google/Client.php';
    require_once 'Google/Service/Analytics.php';


    //variables
    $client_id = 'redacted';
    $client_secret = 'redacted';
    $redirect_uri = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER['PHP_SELF'];
    $dev_key = 'redacted';

    //create a Google client
    $client = new Google_Client();
    $client->setApplicationName('App');

    //sets client's API information
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setRedirectUri($redirect_uri);
    $client->setDeveloperKey($dev_key);
    $client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly'));

    //if log …
Run Code Online (Sandbox Code Playgroud)

php authentication google-analytics oauth oauth-2.0

3
推荐指数
1
解决办法
6964
查看次数

标签 统计

authentication ×1

google-analytics ×1

oauth ×1

oauth-2.0 ×1

php ×1