1

Я пытаюсь использовать Google+ API для доступа к Google Диску через веб-приложение с помощью javascript. Я всегда получаю ошибку 401 Invalid Credentials, даже несмотря на то, что у меня есть действительный токен доступа, который еще не истек (подтвержден на https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=MY_ACCESS_TOKEN), я также включил Drive API и не отменил доступ к токену. Кроме того, я дважды проверял, и токен доступа определенно отправлен в заголовок авторизации (я просмотрел запрос через отладчик моего браузера). Из того, что я исследовал, это основные причины ошибки 401 Invalid Credentials. Тем не менее, я все еще получаю эти ошибки и не могу понять, почему. Вот мои файлы, которые я удалил client_id и api_key.Google+ API 401 Неверные учетные данные

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.

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 ошибку или как дальше найти информацию, что было бы здорово.

EDIT: Как мне создать запрос? Когда я пользуюсь

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


    }); 

Я могу видеть, что заголовок авторизации верен. Тем не менее, в учебниках, которые я видел, что они используют:

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

В котором запрос выглядит в отладчике моего браузера и не обязательно содержит правильный заголовок авторизации

ответ

4

Я помню некоторые вопросы, где предоставление как в API Ключ и токен доступа вызвали проблемы с некоторыми вызовами API. Поскольку API-ключ не нужен при вызове методов, прошедших проверку подлинности, вы можете попробовать, если он будет работать, если вы удалите вызовы gapi.client.setApiKey(API_KEY); (которые у вас есть в вашем коде дважды, но это не имеет значения), чтобы узнать, здесь ли это здесь?

+0

Это решило проблему, не зная, почему установка ключа api испортила бы ее. – user2784790

+0

Это проблема в API Drive (и нескольких других API Google). Вот связанная с этим проблема в Google+ API, если вы хотите отобразить ее для обновления по этой проблеме: https://code.google.com/p/google-plus-platform/issues/detail?id=458 – Scarygami

0

Хотя я 90% уверен, что Scarygami предложил будет решить проблему - удалить setApiKey из checkAuth - рассмотреть еще несколько вещей, чтобы попробовать, если это не является источником проблемы:

  • пространств в Идентификатор клиента/клиента секрет
  • ли ваш уполномоченный матч происхождения, что вы создали в Google APIs console

Если поместить в контрольной точке на

Смежные вопросы