문제

OAUTH2를 사용하여 JavaScript 클라이언트에서 일부 Google API에 액세스하려고합니다.사용자가 요청을 인증 할 수 있도록 성공했지만 이해하고 싶은 코드를 실행할 때 예기치 않은 동작이 있습니다.처음으로 '인증'버튼을 클릭하면 결과가 다음과 같습니다.

'{ "오류": { "코드": 401, "메시지": "로그인 필수", "데이터": [{ "도메인": "전역", "이유": "필요", "":"Locge required ","loction type ":"헤더 ","위치 ":"권한 부여 "}]},"id ":"gapirpc "}] '

두 번째 클릭 결과 결과는

입니다.

[ "ID": "GAPIRPC", "결과": { "ID": ""이메일 ":"xxxxx@gmail.com ","verified_email ": true}}]

여기에있는 페이지의 코드가 있습니다

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

코드의 첫 번째 실행에 '로그인 필요'를 얻는 이유와 두 번째 실행에 대한 성공적인 인증에 대해 설명해주십시오.

도움이 되었습니까?

해결책

gapi.auth.authorize 호출에서 "authed"직후 괄호로 인해 authed () 콜백은 gapi.auth.authorize를 호출하기 전에 즉시 실행됩니다.

또한 authed () 처리기에서 인증 확인이 즉각적으로 인증 확인 여부를 확인해야합니다. True Succeeded; 자세한 내용은 여기에서 참조 설명서를 참조하십시오.

https://developers.google.com/api- 클라이언트 라이브러리 / 자바 스크립트 / 참조 / 참조 설명서 # Gapiauthauthorize

은 여기에서 팝업 차단 섹션을 참조하십시오 :

https://developers.google.com/api- 클라이언트 라이브러리 / 자바 스크립트 / 기능 / 인증 # 팝업

"즉시"권한이 실패하면 인증 콜백은 널 (NULL) 토큰 오브젝트 또는 "오류"필드가 포함 된 토큰 객체로 인증 된 콜백을 호출합니다. 이러한 경우 사용자 인터페이스 요소를 제시해야합니다. 사용자는 GAPI.AUTH.AUTHORIZE 통화를 다시 실행할 수 있지만 "IMMEDIATE"를 사용하여 FALSE (또는 생략)로 설정할 수 있습니다. 이렇게하면 브라우저의 팝업 차단기의 Afoul을 실행하지 않고 권한 부여 팝업을 열 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top