Я пытаюсь внедрить 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); }
Я тоже столкнулся с одной и той же ошибкой – «Дневной лимит для неисполненного использования превышен. Продолжение использования требует регистрации».
Я пошел и проверил мою консоль разработчика 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 на моей консоли разработчика, но убедитесь, что оно включено. Кроме того, подождите несколько минут после включения и убедитесь, что вы каждый раз получаете свежий токен перед его попыткой.
Убедитесь, что у вас включен 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» в окне поиска и включите его, если он еще не включен.
Эта проблема возникает, когда вы уже вошли в систему и все еще пытаетесь войти в систему снова и снова. Я столкнулся с такой же ошибкой, поэтому некоторые эксперименты 1) Я открыл сайт на своем мобильном устройстве, и все было в порядке. 2) Затем я попробовал на другом ноутбуке и использовал другую учетную запись gmail для входа в систему, и она снова работала нормально. 3) На моем первом ноутбуке я снова привязал его, нажав кнопку «Signin». Я получил ту же ошибку, поэтому я открыл google.com, а затем полностью вышел из системы, а затем снова попытался, на этот раз это сработало. Поэтому я считаю, что проблема снова и снова вызывает кнопку входа в систему без выхода из системы.
Я не уверен, что это действительно проблема, но по крайней мере это то, что я нашел. Я все еще пытаюсь, пытаясь и пытаюсь, опубликует, если найду что-нибудь еще.
Приветствия!
Таким образом, я столкнулся с этой проблемой, и вышеупомянутые два метода / решения (включение доступа к API и выключение учетных записей) не помогли мне, потому что для google + signin вам нужно передать токен доступа в заголовок авторизации http-вызова.
Вот как вы это делаете с помощью jQuery:
$.ajax({ type: "GET", url: "https://www.googleapis.com/plus/v1/people/me", headers: { "Authorization":"Bearer " + {access_token}, } });
Кажется, ваша проблема связана с кодом на стороне сервера, где вы передаете access_token в параметрах (что необязательно).
Вот моя попытка сделать так:
$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);'
Надеюсь, вы отправите этот токен доступа через https! Возможно, стоит подумать об использовании кода вместо этого и сделать обмен на стороне сервера для токена доступа, для повышения безопасности, если ничего другого, есть некоторая документация по этому подходу здесь: https://developers.google.com/+/web / зарегистрировались / серверный поток
Что касается проблемы, которую вы видите, кажется, что токен доступа плох или не работает правильно. Можете ли вы проверить токен доступа, который вы получаете против конечной точки tokeninfo: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= – это должно содержать достоверную информацию. В коде ничего не выделяется, но если токен становится искаженным, вы можете увидеть аналогичную ошибку.
Вы должны добавить apiKey
с URL-адресом:
$curl = curl_init( 'https://www.googleapis.com/urlshortener/v1/url?key=AIza3834-Key' );
У меня такая же проблема, решение: set APIKEY
Я тоже отчаялся, и, наконец, мне удалось найти решение. Единственная проблема заключается в том, чтобы добавить правильный токен api, связанный с вашим приложением, в моем случае был токен браузера, и все это работает.
Пример. Я хотел иметь все события, связанные с моим календарем.
https://www.googleapis.com/calendar/v3/calendars/ {calendar_id} / events? & key = {api_key}
возможно, я помогу тем, у кого такая же проблема.
Удачи