Pregunta

Estoy tratando de acceder a algunas API de Google desde mi cliente Javascript usando OAuth2.He logrado que el usuario autentique las solicitudes, pero hay algún comportamiento inesperado al ejecutar el código a continuación que me gustaría comprender.Cuando haga clic en el botón 'Autorizar' la primera vez, el resultado es:

'[{"ERROR": {"CÓDIGO": 401, "Mensaje": "Inicie sesión requerido", "Datos": [{"Dominio": "Global", "Razón": "Requerido", "Mensaje":" INICIARIO REQUERIDO "," LOCKYTYPE ":" encabezado "," Ubicación ":" Autorización "}]}," ID ":" GAPIPPC "}] '

En el segundo clic, el resultado es

[{"ID": "GAPIRPC", "Resultado": {"ID": "1115793426680xxxx", "correo electrónico": "xxxxx@gmail.com", "verified_email": true}}]

Aquí está el código para la página que estoy probando

<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>-->

¿Podría explicar por qué obtendría un 'inicio de sesión requerido' en la primera ejecución del código y una autenticación exitosa en la segunda ejecución?

¿Fue útil?

Solución

Debido a los paréntesis inmediatamente después de "Authed" en la llamada a Gapi.Auth.Autorize, la devolución de llamada Authed () se ejecuta de inmediato, antes de la llamada a Gapi.Auth.Autorize.

Además, en su controlador AUTPED () debe verificar si la verificación de autorización con inmediato: Verdadero lo sucedió; Para obtener más detalles, consulte la documentación de referencia aquí:

https://developers.google.com/api- Client-Biblioteca / JavaScript / Referencia / Referenciado # GAPAAUTHAUTORIZE

Consulte también la sección en el bloqueo emergente aquí:

https://developers.google.com/api- Client-biblioteca / JavaScript / Featuration / Autenticación # PopUp

Cuando falla la autorización "inmediata", la devolución de llamada autorizada se invocará con un objeto token nulo, o un objeto token que contenga un campo "Error"; En estos casos, debe presentar un elemento de la interfaz de usuario, el usuario puede hacer clic en que volverá a ejecutar la llamada GAPI.AUTH.Autorizar pero con el conjunto "inmediato" en FALSO (u OMITE). Esto permite que se abra la ventana emergente de autorización sin ejecutar AFOUL del bloqueador emergente de su navegador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top