it-swarm.com.ru

Получайте "Дневной лимит для использования без аутентификации. Превышено. Для продолжения использования требуется регистрация" при попытке войти в Google Plus через мое веб-приложение.

Я пытаюсь реализовать регистрацию в Google Plus в своем веб-приложении, и я следовал документам Google, чтобы настроить регистрацию, однако, когда я пытаюсь зарегистрироваться после принятия разрешений и использования токена доступа, мне возвращаются любые повторные вызовы API, которые я делаю, возвращает Превышен суточный лимит для неаутентифицированного использования. Продолжение использования требует ошибки регистрации. Я уже зарегистрировал свое приложение с помощью ключа ouath 2.0, поэтому я не понимаю, что делаю неправильно. Вот мой код.

Cient Side

var clientId = "5XXX000XX.apps.googleusercontent.com"; 
     var apiKey = "AIzaSyCAXE5JSa36jcC*X7HV40SBcIWBiVGUTBE"; 
     var scopes = "https://www.googleapis.com/auth/plus.login"; 
     var accessToken = null;


        function initer(){
            gapi.client.setApiKey(apiKey);
            //alert("Hello init");
            if($("#authorize-button").length>0)
            $("#authorize-button").click(onLoginClick);
        }

         function onLoginClick(){
            //$("#modalLoading").modal();
            //alert("yeah");
            gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, onConnect);
        }

        function onConnect(authResult) {
            //alert("On connect");
            if (authResult && !authResult.error) {
            alert("Hey");
            accessToken=authResult['access_token'];
             triggerLogin();
            } else {
                alert("Error");

             }
        }


        triggerLogin = function(){
        alert("Triggering login");
            $("#modalLoading").modal();
            $.ajax({
                url: window.config.site_root + "account/google_login",
                type: "POST",
                data: "access_token="+ accessToken,
                success: onLogin,
                error: function(){
                    onError("Logging In", "starting your session");
                }
            });
        }

         onLogin = function(login){
         alert("Login start");
            $("#modalLoading").modal("hide");
            if(login.operation)
                location.reload();
            else{
            alert("Register will start");
                triggerRegistration();
                }

        }

        triggerRegistration = function(){

            $("#modalLoading").modal();
                $.ajax({
                    url: window.config.site_root + "account/google_registration",
                    type: "POST",
                    data: "access_token="+accessToken,
                    success: onRegistration,
                    error: function(){

                        alert("An Error");
                    }
                });

        }

        onRegistration = function(data){
        alert("Handling register");
            $("#modalLoading").modal("hide");
            if(data.account_exists)
                stage.showErrorModal("Account already registered", "There is already an account with that email address, are you sure you created an account using this login method?");
            else
                if(data.operation){
                    alert("Login now");
                    triggerLogin();
                    }
                else{
                alert("Error");
                    onError("Registering", "creating your account");
                    }
        }

Вот мой код на стороне сервера

 public function google_registration()
            {
                $access_token = (isset($_POST["access_token"]) && !empty($_POST["access_token"])) ? $_POST["access_token"] : null;


                $name = null;
                $email = null;
                $account_id = null;
                $picture = null;
                $gender = null;

                try
                {
                    if($access_token)
                    {
                        $me = file_get_contents("https://www.googleapis.com/plus/v1/people/me?access_token=".$access_token);
                        if($me)
                        {
                            $me = json_decode($me);
                            $name = $me->name.formatted;
                            $email = $me->email;
                            $account_id = $me->id;
                            $picture = $me->image;
                            $gender = ($me->gender == "female") ? 1 : 0;
                        }
                    }
                }
                catch(Exception $error)
                {
                    // let the system handle the error quietly.
                }
                return $this->service_registration("google", $name, $email, $account_id, $picture, $gender);

            }
40
Michael Nana

Я тоже столкнулся с той же ошибкой - «Превышен дневной лимит для неаутентифицированного использования. Для продолжения использования требуется регистрация».

Я пошел и проверил свою консоль разработчика Google в разделе API для проекта, связанного с ключом API/ключом авторизации, например, https://console.developers.google.com/project/<your app id>/apiui/api. Статус для Google + API был установлен на OFF. Я включил его.

Затем я получил еще один токен доступа, а затем попытался с новым. Это сработало, то есть ошибка исчезла, и я получил детали профиля. Чтобы перепроверить, действительно ли это было причиной ошибки, я вернулся в консоль и отключил Google+ API. Но теперь я получаю ошибку:

«Доступ не настроен. Пожалуйста, используйте Консоль разработчика Google для активации API для вашего проекта».

Итак, я не уверен на 100%, что это было включение/выключение Google+ API в моей консоли разработчика, но действительно убедитесь, что это включено. Кроме того, подождите несколько минут после включения и убедитесь, что вы каждый раз получаете свежий токен, прежде чем пытаться его использовать.

26
user3392439

Эта проблема возникает, когда вы уже вошли в систему и все еще пытаетесь войти снова и снова. Я столкнулся с той же ошибкой, что и некоторые эксперименты 1) Я открыл веб-сайт на своем мобильном телефоне, и все было хорошо. 2) Затем я попробовал на другом ноутбуке и использовал другую учетную запись Gmail для входа, и он снова работал нормально. 3) На моем первом ноутбуке я снова связался, нажав кнопку «Войти», я получил ту же ошибку, поэтому я открыл google.com, затем полностью вышел из системы и попытался снова, на этот раз это сработало. Поэтому я считаю, что проблема заключается в том, чтобы снова и снова нажимать кнопку входа без выхода из системы.

Я не уверен, действительно ли это проблема, но по крайней мере это то, что я нашел. Я все еще пытаюсь, пытаюсь и пытаюсь, опубликую, если найду что-нибудь еще.

Ура !!

9
www.amitpatil.me

google api

Убедитесь, что у вас включен Google+ Api.

Без этого вы получите такие ошибки, как: 

"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",

Чтобы включить его:

1) открыть https://console.developers.google.com

2) выберите свой проект (верхний правый угол)

3) выполните поиск «Google+ API» в окне поиска и включите его, если он еще не включен.

9
Mantas D

Поэтому я столкнулся с этой проблемой, и два вышеупомянутых метода/решения (включение доступа к API и выход из учетных записей) не сработали для меня, потому что для входа в систему через Google + необходимо указать маркер доступа в заголовке авторизации вызова http.

Вот как вы делаете это через jQuery:

    $.ajax({
      type: "GET", 
      url: "https://www.googleapis.com/plus/v1/people/me",
      headers: {
       "Authorization":"Bearer " + {access_token},
      }
    });

Кажется, ваша проблема связана с кодом на стороне сервера, где вы передаете в параметрах access_token (что не обязательно).

Вот моя попытка понять, как будет выглядеть реализация PHP:

$opts = array(
'http'=>array(
 'method'=>"GET",
 'header'=>"Authorization: Bearer ".$access_token 
 )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('https://www.googleapis.com/plus/v1/people/me', false, $context);'
8
superjisan

Вы должны добавить apiKey с URL:

$curl = curl_init( 'https://www.googleapis.com/urlshortener/v1/url?key=AIza3834-Key' );
7
Mehwish Rais Siddiqui

Надеюсь, вы отправляете этот токен доступа через https! Возможно, стоит подумать об использовании этого кода вместо этого и обмениваться токенами доступа на стороне сервера, для повышения безопасности, если ничего другого, здесь есть некоторая документация по этому подходу: https://developers.google.com/+/web/вход/поток на стороне сервера

Что касается проблемы, с которой вы сталкиваетесь, похоже, что токен доступа плохой или неправильно прошел. Можете ли вы проверить полученный токен доступа к конечной точке tokeninfo: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= - в котором должна отображаться действительная информация. Ничто не выделяется как отключение в коде, но если токен искажается, вы можете увидеть похожую ошибку. 

5
Ian Barber

У меня есть та же проблема, решение: установить APIKEY

1
Minh Tiến

Я также был в отчаянии, и, наконец, мне удалось найти решение. Единственная проблема - добавить правильный api-токен, связанный с вашим приложением, в моем случае это был токен браузера, и все это работает.

Пример: я хотел, чтобы все события были связаны с моим календарем

https://www.googleapis.com/calendar/v3/calendars/ {calendar_id}/events? & key = {api_key}

может быть, я помогу кому-то, кто имеет ту же проблему.

Удачи

1
Luca Fritz Ferrari

У меня была проблема на стороне JavaScript (на стороне клиента) . В моем случае необходимо было добавить API_KEY в gapi.client.init()

Полная моя функция:

async function initClient () {
  return new Promise((resolve, reject) => {
    const API_KEY = "YOUR_GOOGLE_API_KEY"
    const CLIENT_ID = "YOUR_GOOGLE_OAUTH2_CLIENT_ID"
    const DISCOVERY_DOCS = ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest']
    const SCOPES = 'https://www.googleapis.com/auth/youtube.readonly'

    const initData = { apiKey: API_KEY, clientId: CLIENT_ID, discoveryDocs: DISCOVERY_DOCS, scope: SCOPES }

    gapi.client.init(initData).then(function () {
        // YOUR CODE HERE
    }, function (error) {
      reject(new Error('Reject Error: ' + error))
    })
      .catch(err => console.log('Catch Error', err))
  })
}

API_KEY и CLIENT_ID можно взять из здесь (Google Cloud Platform -> API и сервисы -> учетные данные -> учетные данные [вкладка])

0
TitanFighter

Я пытался использовать access_token для получения имени и картинки возвращающегося пользователя, когда он уже вошел в систему во время предыдущего сеанса. После появления сообщения об ошибке "unauthenticated use", это то, что в итоге сработало через cURL в PHP.

//initialize provider specific params for oauth2
$access_token = <fetched from app database from last login> //remember to never expose this to users
$api_url = 'https://www.googleapis.com/plus/v1/people/me';
$headers = [
    'Authorization: Bearer '.$access_token
];

//send curl request
$curl = curl_init();
$curl_opts = [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POST => 0, //GET
    CURLOPT_TIMEOUT => 30,
    CURLOPT_SSL_VERIFYPEER => 1,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_URL => $api_url,
    CURLOPT_HTTPHEADER => $headers,
];
curl_setopt_array($curl, $curl_opts);
$curl_response = json_decode(curl_exec($curl), true);
$curl_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

//parse curl response from provider into name and icon fields for my app
$name = $curl_response['displayName'];
$icon = $curl_response['image']['url'];

Обратите внимание, что https://www.googleapis.com/plus/v1/people/me (для возврата пользователей через access_token) и https://www.googleapis.com/oauth2/v4/token (для первоначального входа через code) возвращают имя пользователя и изображение в разных полях/структурах.

0
OXiGEN

В моем случае это произошло в определенное время суток. Потратив несколько часов, я наконец-то обнаружил, что мой дневной лимит квоты ( запросов на 100 секунд ) был превышен в то время из-за большого количества запросов. так что выкидывал ошибку. Я связался с поддержкой Google, чтобы увеличить их.

0
Thamaraiselvam

В моем случае это было потому, что я использовал старый токен доступа. Необходимо помнить, что токены доступа имеют короткий срок службы, поэтому необходимо использовать токен обновления для создания нового токена доступа. Пример (с использованием класса PHP):

// Get the access token from DB or filesystem
$accessToken = $this->getAccessToken();
// Set the access token
$this->client->setAccessToken($accessToken);

// Refresh the token if it's expired.
if ($this->client->isAccessTokenExpired()) {
    $this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken());
    // Save the new access token to DB or filesystem
    $this->saveAccessToken($this->client->getAccessToken());
}
0
Nahuel