Я хочу иметь два потока, где на первой странице я просто прошу пользователя войти в систему. Затем, если он / она хочет пригласить друзей, я хочу запустить метод gapi.client.people.list и получить список видимых кругов. Поскольку я делаю это на двух отдельных страницах, я не могу пройти через объект gapi, который был аутентифицирован. Я не хочу снова запускать процесс входа в систему, но если я сделаю напрямую gapi.client.load, мне будет выдано сообщение Daily unauthenticated usage limit exceeded.

function getFriends(e)
{

    gapi.client.load('plus','v1', function(){
            //gapi.client.setApiKey("myKey");
            var request = gapi.client.plus.people.list({
                    'userId': 'me',
                'collection': 'visible'
            });
            request.execute(function(people) {
                    console.log(people);
                    $('#googleFriends').empty();
                    $('#googleFriends').append('Number of people visible to this app: ' +
                            people.totalItems + '<br/>');
                    for (var personIndex in people.items) {
                            person = people.items[personIndex];
                            $('#googleFriends').append('<img src="' + person.image.url + '">');
                    }
            });
    });
}

Есть ли здесь решение? Я пробовал использовать gapi.client.setApiKey, но он продолжает возвращать invalid key error. Я прочитал и попытался понять руководство Google по быстрому запуску, но там они вызывают people.list как часть процесса входа.

1
Naveen Sharma 27 Авг 2014 в 16:53

1 ответ

Лучший ответ

Если пользователь уже вошел в систему / авторизовал ваше приложение, вы можете использовать метод gapi.auth.authorize с теми же параметрами client_id и scope, которые вы использовали для входа, и immediate установлен на true.

gapi.auth.authorize({
  client_id: 'your_client_id',
  scope: 'your_scopes',
  immediate: true
}, function (authResult) {
  // check authresult and then call getFriends
});

Это будет проходить через процесс аутентификации без какого-либо взаимодействия с пользователем, и gapi.client сможет совершать авторизованные вызовы. Однако вам нужно будет проверить ответ в обратном вызове, чтобы убедиться, что вы действительно авторизованы.

Документы: https://developers.google.com/api-client -library / javascript / reference / referencedocs # gapiauthauthorize.

1
Scarygami 27 Авг 2014 в 19:16
Таким образом, нажатие кнопки должно вызывать gapi.auth.authorize. Мне вообще нужен gapi.client.load. Простите мою наивность, если это очевидно
 – 
Naveen Sharma
27 Авг 2014 в 19:27
Да, вам нужно вызвать gapi.client.load, который загружает специальные методы API, иначе вы не сможете вызывать методы gapi.client.plus.
 – 
Scarygami
27 Авг 2014 в 19:30