【问题标题】:Google+ API 401 Invalid CredentialsGoogle+ API 401 无效凭据
【发布时间】:2013-09-16 17:37:25
【问题描述】:

我正在尝试使用 Google+ API 通过使用 javascript 的 Web 应用程序访问 Google Drive。我总是收到 401 Invalid Credentials 错误,即使我有一个未过期的有效访问令牌(在https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=MY_ACCESS_TOKEN 确认),我也启用了 Drive API,并且没有撤销对令牌的访问。另外,我已经仔细检查过,访问令牌肯定是在授权标头中发送的(我通过浏览器的调试器查看了请求)。根据我的研究,这些是 401 Invalid Credentials 错误的主要原因。但是,我仍然收到这些错误,无法弄清楚原因。这是我的文件,我已经删除了 client_id 和 api_key。

Javascript:

var SCOPES = ['https://www.googleapis.com/auth/plus.login','https://www.googleapis.com/auth/drive'];
var CLIENT_ID = 'MY_CLIENT_ID';
var API_KEY = 'MY_API_ID';


function load()
{
  console.log("load");
  gapi.client.setApiKey(API_KEY);
  window.setTimeout(checkAuth,1);

}

function checkAuth() {

    console.log('checkAuth');
    gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuthResult);

}

 function handleAuthResult(authResult) {


    gapi.client.setApiKey(API_KEY);

    if (authResult && !authResult.error) 
    {
        makeRequest();
    } 

    else 
    {
            alert('error');
    }
  }

function makeRequest()
{

gapi.client.load('drive','v2',function()
{
    var request = gapi.client.request({
        'path': '/drive/v2/about',
        'method': 'GET',


    });
    debugger;
    request.execute(function(response) 
    {

            debugger;


        });

});
}

我的 HTML 仅包含相关的 javascript 文件并从 myScript 调用 load 方法。

HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Bootstrap -->
    <script src="../js/myScript.js"></script>
    <script src="https://apis.google.com/js/client.js"></script>
    <script src="https://apis.google.com/js/plusone.js?onload=load"></script>   
  </head>


  <body>

  </body>
  </html>

如果有人能弄清楚我收到 401 错误的原因或如何进一步查找信息,那就太好了。

编辑:我应该如何创建请求?当我使用

var request = gapi.client.request({
        'path': '/drive/v2/about',
        'method': 'GET',


    });

我可以看到授权标头是正确的。但是,在我看过的教程中,他们使用:

  var request = gapi.client.drive.about.get({}); 

请求在我的浏览器调试器中看起来不同,并且不一定包含正确的授权标头

【问题讨论】:

    标签: javascript google-plus google-drive-api google-drive-realtime-api


    【解决方案1】:

    我记得一些问题,即同时提供 API 密钥和访问令牌会导致某些 API 调用出现问题。由于调用经过身份验证的方法时不需要 API 密钥,如果您删除 gapi.client.setApiKey(API_KEY); 调用(您的代码中有两次,但这不重要),您是否可以尝试它是否有效,看看是否是这种情况在这里?

    【讨论】:

    • 解决了这个问题,不知道为什么设置api密钥会搞砸。
    • 这是 Drive API(以及其他几个 Google API)中的问题。这是 Google+ API 中的一个相关问题,如果您想为它加注星标以获取有关问题的更新:code.google.com/p/google-plus-platform/issues/detail?id=458
    【解决方案2】:

    虽然我 90% 确信 Scarygami 的建议会解决您的问题 - 从 checkAuth 中删除 setApiKey - 如果这不是问题的根源,请考虑更多尝试:

    • 客户端 ID/客户端密码中的空格
    • 您的授权来源是否与您在Google APIs console 中设置的相符

    如果你在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多