Подтвердить что ты не робот

Продолжайте получать "Ежедневный лимит неисполненного использования превышен". Продолжение использования требует регистрации "при попытке google плюс вход в мое веб-приложение

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

Cient сторона:

const clientId = "5XXX000XX.apps.googleusercontent.com";
const apiKey = "AIzaSyCAXE5JSa36jcC*X7HV40SBcIWBiVGUTBE";
const scopes = "https://www.googleapis.com/auth/plus.login";
let 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() {
      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() {
      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);

            }
4b9b3361

Ответ 1

Я тоже столкнулся с одной и той же ошибкой - "Daily Limit for Unauthenticated Use Exceeded. Продолжение использования требует регистрации".

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

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

"Доступ не настроен. Используйте Google Developers Console для активации API для вашего проекта.

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

Ответ 2

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" в поле поиска и включите его, если он еще не включен.

Ответ 3

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

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

Приветствия!!

Ответ 4

Итак, я столкнулся с этой проблемой, и вышеупомянутые два метода/решения (включение доступа к API и выключение аккаунтов) не сработали для меня, потому что для google + signin вам нужно передать токен доступа в заголовок авторизации 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);'

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

У меня такая же проблема, решение: set APIKEY

Ответ 8

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

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

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

Возможно, я помогу тем, у кого такая же проблема.

Удача

Ответ 9

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

Ответ 10

В моем случае это было потому, что я использовал старый токен доступа. Необходимо помнить, что токены доступа имеют короткий срок службы, поэтому необходимо использовать токен обновления для создания нового токена доступа. Пример (с использованием класса 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 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());
}

Ответ 11

Я пытался использовать 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) возвращаются имя пользователя и изображение в разных полях/структурах.

Ответ 12

У меня была проблема на стороне 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 & Services → Учетные данные → Учетные данные [Tab])

Ответ 13

У меня была такая же проблема, и я понял, что случилось.

Когда вы включаете API Google Plus из своей библиотеки, для полной активации необходимо выполнить дополнительные действия. Вы должны нажать кнопку "Управление" на странице библиотеки API Google Plus, заполнить ответ на два вопроса и отправить. Все это!!

Это исправило мою проблему, и я надеюсь, что это исправит и вашу. Вот снимок экрана с той страницей, на которую я попал после того, как нажал кнопку "Управление" с надписью "Добавить учетные данные в ваш проект".

Google Plus API Library Add credentials to your project