Question

J'essaie d'accéder à certaines API Google de mon client JavaScript à l'aide de OAuth2.J'ai réussi à obtenir l'utilisateur d'authentifier les demandes, mais il y a un comportement inattendu lors de l'exécution du code ci-dessous que j'aimerais comprendre.Lorsque je clique sur le bouton "Autoriser" la première fois, le résultat est:

'[{"ERROR": {"Code": 401, "Message": "Login requis", "Données": [{"Domaine": "Global", "Raison": "Obligatoire"":" Connexion requise "," EmplacementType ":" Header "," Lieu ":" Autorisation "}]}," ID ":" gapirpc "}] '

sur le deuxième clic Le résultat est

[{"id": "gapirpc", "résultat": {"id": "1115793426680xxxx", "e-mail": "xxxxx@gmail.com", "Verified_email": true}}]

Voici le code de la page que je teste

<div id='sign in'>
    <button onclick="init();">Authorize</button>
</div>
<p id="output">hello</p>

<script type="text/javascript">
    function init() {
        document.getElementById('output').innerHTML='loading oauth2 api'
        gapi.client.load('oauth2', 'v2', auth);
    }

    function auth() {
        var config = {
            client_id: '2264xxxxx-odt0g7jn8vspa3ot9ogjxxxxxxxxx.apps.googleusercontent.com',
            scope: 'https://www.googleapis.com/auth/userinfo.email',
            immediate:true
        };
        document.getElementById('output').innerHTML='authorizing'
        gapi.auth.authorize(config, authed());
    }

    function authed() {
        document.getElementById('output').innerHTML='authorized'
        var request = gapi.client.oauth2.userinfo.get().execute(
            function(resp, raw) {
                document.getElementById('output').innerHTML=raw
            }
        );
    }
 </script>
<script src="https://apis.google.com/js/client.js"></script>
<!--<script src="https://apis.google.com/js/client.js?onload=init"></script>-->

Pourriez-vous s'il vous plaît expliquer pourquoi je recevrais une "connexion requise" lors de la première exécution du code et une authentification réussie sur la deuxième exécution?

Était-ce utile?

La solution

En raison des parenthèses immédiatement après "Authed" dans l'appel à Gapi.Auth.authorize, le rappel autorisé () est exécuté immédiatement, avant l'appel à Gapi.Auth.authorize.

Aussi, dans votre gestionnaire autorisé (), vous devez vérifier si le chèque d'autorisation avec immédiat: vrai a réussi; Pour plus de détails, voir la documentation de référence ici:

https://developers.google.com/api- Client-Bibliothèque / JavaScript / Référence / Référendedocs # GapiauthaThorize

Reportez-vous également à la section sur le blocage pop-up ici:

https://developers.google.com/api- client-bibliothèque / javascript / fonctionnalités / authentification # popup

Lorsque l'autorisation "immédiate" échoue, le rappel autorisé sera invoqué avec un objet de jeton NULL ou un objet de jeton contenant une "erreur"; Dans ces cas, vous devez présenter un élément d'interface utilisateur que l'utilisateur peut cliquer sur lequel vous réexécutera la réexécution de l'appel de Gapi.Auth.Authorize mais avec «Immédiat» défini sur False (ou omis). Cela permet d'ouvrir la fenêtre contextuelle de l'autorisation sans courir au bloqueur pop-up de votre navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top