web-dev-qa-db-fra.com

Continuez à obtenir une "limite quotidienne d'utilisation dépassée non authentifiée. L'utilisation continue nécessite une inscription" lors de la tentative de connexion à Google plus sur mon application Web.

J'essaie d'implémenter Google et m'inscrire sur mon application Web et j'ai suivi les documents Google pour configurer l'inscription. Cependant, lorsque je tente une inscription après avoir accepté les autorisations et que le jeton d'accès est utilisé, je suis retourné à tout appel api que je renvoie. Limite quotidienne pour l'utilisation non authentifiée dépassée. L'utilisation continue nécessite une erreur d'inscription. J'ai déjà inscrit mon application avec une clé ouath 2.0, donc il me semble que je ne comprends pas ce que je fais de mal. Voici mon code.

Côté Cient

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");
                    }
        }

Voici mon code côté serveur

 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

J'ai moi aussi rencontré la même erreur: "Limite journalière d'utilisation dépassée non authentifiée. L'utilisation continue nécessite une inscription".

Je suis allé vérifier dans ma console de développeur Google sous API le projet associé à la clé API/clé d'authentification, par exemple https://console.developers.google.com/project/<your app id>/apiui/api. Le statut de Google + API a été défini sur OFF. Je l'ai allumé.

J'ai ensuite reçu un autre jeton d'accès, puis essayé avec le nouveau. Cela a fonctionné, c.-à-d. Que l'erreur avait disparu et que j'avais les détails du profil. Pour vérifier si cela était bien la cause de l'erreur, je suis retourné à la console et j'ai désactivé l'API Google+. Mais maintenant, j'ai l'erreur:

"Accès non configuré. Veuillez utiliser la console des développeurs Google pour activer l'API de votre projet."

Je ne suis donc pas tout à fait sûr que ce soit l'activation/la désactivation de l'API Google+ dans ma console de développeur, mais assurez-vous que cela est activé. En outre, attendez quelques minutes après la mise sous tension et assurez-vous d'obtenir un nouveau jeton avant de l'essayer.

26
user3392439

Ce problème se produit lorsque vous êtes déjà connecté et essayez toujours de vous connecter encore et encore. J'ai fait face à la même erreur, de même que des expériences 1) J'ai ouvert un site Web sur mon mobile et tout allait bien. 2) Ensuite, j'ai essayé sur un autre ordinateur portable et utilisé un compte gmail différent pour me connecter et cela a encore fonctionné correctement. 3) Sur mon premier ordinateur portable, j'ai de nouveau attaché en cliquant sur le bouton "Signin" et j'ai obtenu la même erreur. J'ai donc ouvert google.com, puis complètement déconnecté, puis de nouveau essayé. Cette fois, cela a fonctionné. Donc, je crois que la question est en cliquant sur le bouton de connexion encore et encore sans se déconnecter.

Je ne sais pas si c'est vraiment un problème, mais c'est ce que j'ai trouvé. J'essaie encore, j'essayerai et j'essaierai, si je trouve autre chose.

À votre santé !!

9
www.amitpatil.me

google api

Assurez-vous que Google+ Api ici est activé.

Sans cela, vous obtiendrez des erreurs comme: 

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

Pour l'activer:

1) ouvrir https://console.developers.google.com

2) choisissez votre projet (coin supérieur droit)

3) recherchez "Google+ API" dans le champ de recherche et activez-le s'il n'est pas déjà activé.

9
Mantas D

J'ai donc rencontré ce problème et les deux méthodes/solutions ci-dessus (activation de l'accès à l'API et déconnexion de comptes) ne fonctionnaient pas pour moi car pour Google + Signin, vous devez transmettre le jeton d'accès dans l'en-tête d'autorisation de l'appel http.

Voici comment faire via jQuery:

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

Il semble que votre problème concerne le code côté serveur où vous passez access_token dans les paramètres (ce qui n’est pas nécessaire).

Voici ma tentative sur la mise en oeuvre de 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

Vous devez ajouter la apiKey avec l'URL:

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

J'espère que vous envoyez ce jeton d'accès via https! Il pourrait être intéressant d’envisager d’utiliser le code à la place et de procéder à un échange côté serveur contre un jeton d’accès. Pour améliorer encore la sécurité, il existe une documentation sur cette approche ici: https://developers.google.com/+/web/connexion/flux côté serveur

En ce qui concerne le problème que vous rencontrez, il semble que le jeton d’accès soit mauvais ou qu’il ne réussisse pas correctement. Pouvez-vous vérifier le jeton d'accès que vous recevez par rapport au point de terminaison tokeninfo: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= - qui doit afficher des informations valides. Rien ne se démarque dans le code, mais si le jeton est mutilé, une erreur similaire risque de se produire. 

5
Ian Barber

J'ai le même problème, la solution est la suivante: set APIKEY

1
Minh Tiến

J'étais aussi désespéré et j'ai finalement réussi à trouver une solution. Le seul problème est d'ajouter le jeton api correct lié à votre application. Dans mon cas, c'était le jeton de navigateur, et tout fonctionne.

Exemple: je voulais que tous les événements soient associés à mon calendrier

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

peut-être que je vais aider quelqu'un qui a le même problème.

Bonne chance

1
Luca Fritz Ferrari

J'ai eu un problème côté JavaScript (côté client) . Dans mon cas, il était nécessaire d'ajouter API_KEY à gapi.client.init()

Complet ma fonction:

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 et CLIENT_ID peuvent être extraits de ici (Google Cloud Platform -> API et services -> Informations d'identification -> Informations d'identification [Tab])

0
TitanFighter

J'essayais d'utiliser access_token pour récupérer le nom et la photo d'un utilisateur déjà inscrit alors qu'il s'était déjà connecté au cours d'une session précédente. Après avoir exécuté le message d'erreur "unauthenticated use", voici ce qui a finalement fonctionné via cURL en 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'];

Notez que https://www.googleapis.com/plus/v1/people/me (pour renvoyer des utilisateurs via access_token) et https://www.googleapis.com/oauth2/v4/token (pour une connexion initiale via code) renvoient le nom d'utilisateur et l'image dans des champs/structures différents.

0
OXiGEN

Dans mon cas, cela s’est produit à une heure précise de la journée. Après avoir passé quelques heures à finalement constaté que ma limite de quota quotidienne ( Requêtes par 100 secondes ) était dépassée à ce moment-là en raison du nombre élevé de demandes. donc c'était jeter l'erreur. J'ai contacté le support Google pour les augmenter.

0
Thamaraiselvam

Dans mon cas, c'était parce que j'utilisais un ancien jeton d'accès. N'oubliez pas que les jetons d'accès ont une durée de vie courte. Vous devez donc utiliser le jeton d'actualisation pour générer un nouveau jeton d'accès. Exemple (en utilisant une classe 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