2013-06-29 1 views
2

Используя gapi.client.request, я могу успешно извлечь из Диска.Получение «Отсутствует требуемый параметр: область действия» после 401 с использованием API Javascript Google

Однако, если я аннулированию маркер доступа и повторите попытку, я получаю 401, как и следовало ожидать, с последующим вызовом https://accounts.google.com/o/oauth2/auth?scope=&immediate=true&proxy=oauth2relay530384583&redirect_uri=postmessage&origin=http%3A%2F%2Fdev.myapp.co%3A9000&response_type=token&state=780297101%7C0.3257751071&authuser=0

которая выйдет из строя 400 «Отсутствует необходимый параметр: объем»

Глядя на URL, область действительно пуста, но почему?

В начале аутентификации, я устанавливаю мои областей, используя массив таким образом ...

var scopes = [ 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/userinfo.email', 
       'https://www.googleapis.com/auth/userinfo.profile', "https://docs.googleusercontent.com/", "https://docs.google.com/feeds/", 
       "https://www.googleapis.com/auth/drive.install","https://www.googleapis.com/auth/tasks" ]; 

код сам по себе ...

var request = gapi.client.request({ 
'path': '/drive/v2/files/'+qObject.id, 
'method': 'GET', 
'params': {'maxResults': '1'} 
}); 
request.execute(function(resp) { 
    console.log(resp); // this get works as expected 
}); 

// now invalidate the access token 
var token=gapi.auth.getToken(); 
token.access_token = "foo"; 
gapi.auth.setToken(token); 

request = gapi.client.request({ 
'path': '/drive/v2/files/'+qObject.id, 
'method': 'GET', 
'params': {'maxResults': '1'} 
}); 
request.execute(function(resp) { 
console.log(resp); // this fails with a 401 as expected, but fails to get a new token 
}); 
+0

Где код, в котором вы строите URL-адрес и отправляете его? Я предполагаю, что есть какая-то причина, по которой области видимости отсутствуют. – John

+0

Код в вопросе. "var request = gapi.client.request (...); request.execute (...)" . Помните, что мой вызов Диска * работает *. Бит, который не является тем, как клиентская библиотека gapi отвечает на ответ 401, если истекает срок действия токена доступа. Так полный поток: - - получить маркер доступа работает нормально - получить элемент из Диска Works OK - Аннулируйте маркер доступа для имитации истечения после 3600 секунд - получить элемент из Диска Возвращает 401, как ожидалось, что ОК - библиотека gapi автоматически пытается выполнить авторизацию, но с ошибочным URL-адресом, который затем не работает 400 – pinoyyid

ответ

2

Согласно documentation, scope параметр должен быть «ограниченным пространством набором разрешений», а не массивом разрешений.

+0

. Ссылка на вашу документацию ссылается на вызов XHR, а не на то, как область передается в библиотеку Javascript. Документы для библиотеки JS на странице https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauthauthorize говорят: «scope \t array \t Область полномочий или области действия для авторизации». – pinoyyid

+0

Не могли бы вы рассказать, где это должно быть определено? –

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