문제

내가 사용하는 Google 로그인을 통해 JS 나타납 내 코드와 데이터를 얻기 두 번.나는 확실하지 않은 이유가 발생합니다.

클릭할 때 내에 로그인"Google"버튼을,그것은 뱉어(console.로그(결과))에 대한 데이터를 사용합니다.다음 프롬프트를 발생하게 선택하는 계정의 내(나는 로그에 여러 google 계정).클릭할 때 계정이 나는 코드는 다 뱉어내는 사용자 데이터를 다시합니다.

이 발생하는 이유는 무엇입니까?그것은 문제 때문에 내가 침 데이터,을 만들고 싶은 ajax 를 호출하는 사용자를 확인하고 다음을 리디렉션니다.그래서 본질적으로,그리고 이렇게 두 번지 않은 어떤 멋진 경우 나고 싶지 않을 사용하여 로그인하는 자격을 구글로 전달 뒤에 갈까요?

(function() {
   var po = document.createElement('script');
   po.type = 'text/javascript'; po.async = true;
   po.src = 'https://apis.google.com/js/client:plusone.js';
   var s = document.getElementsByTagName('script')[0];
   s.parentNode.insertBefore(po, s);
 })();

function googleLogin() {
    var additionalParams = {
        'callback': googleCallback
    };

    gapi.auth.signIn(additionalParams);
}

function googleCallback(authResult) {
    if (authResult['status']['signed_in']) {
        gapi.client.load('oauth2', 'v2', function() {
            gapi.client.oauth2.userinfo.get().execute(function(resp) {
                console.log(resp);
            })
        });
    } else {
        console.log('Sign-in state: ' + authResult['error']);
    }
}

업데이트: 면 내가 로그아웃의 모든 내 Google 계정을 제외하고는(의 중 하나)를 호출하면 구글은 여전히 중복됩니다.이번에 로그인하고 내가 보니다.로그()을 출력하는 데이터에 두 번.액세스 토큰은 동일합니다.

Update2: console.로그(resp)은 두번 출력

Update3: 단지 더 설명:

firebug

도움이 되었습니까?

해결책

가 발생할 수 있는 두 개의 전화"콘솔입니다.로그(resp);"내에"googleCallback"기능:

의 기능에 대해 정의하는 로그인에서 콜백을 호출됩니다 모든 시간에는 사용자의 로그인 상태 변경

이 견적에서 가져온 "모니터링 사용자 세션 상태" 웹 페이지입니다.

당신이 볼 수 있는 문서에서,권한 결과는 다른 상태"방법을"값:

  • null
  • 프롬프트
  • 자동차

그래서 당신의 콜백 코드가 트리거되면 로그인 프롬프트가 나타납니다("프롬프트에")그리고 때"Welcome back"배너가 나타납니다("AUTO").

을 정의 콜백에서 코드를 다루고 각 이벤트 트리거할 수 있습을 변경하는 코드는 다음과 같다:

function signinCallback(authResult) {
    if (authResult['status']['signed_in']) {
        // Update the app to reflect a signed in user
        // Hide the sign-in button now that the user is authorized, for example:
        // document.getElementById('signinButton').setAttribute('style', 'display: none');

        if (authResult['status']['method'] == 'PROMPT') {
            console.log(authResult['status']['method']);

            gapi.client.load('oauth2', 'v2', function () {
                gapi.client.oauth2.userinfo.get().execute(function (resp) {
                    console.log(resp);
                })
            });
        }
    } else {
        // Update the app to reflect a signed out user
        // Possible error values:
        //   "user_signed_out" - User is signed-out
        //   "access_denied" - User denied access to your app
        //   "immediate_failed" - Could not automatically log-in the user
        console.log('Sign-in state: ' + authResult['error']);
    }
}

이 코드는 만화"토큰.클라이언트입니다.oauth2.userinfo.get()"기능은 사용자가 로그에 이벤트가 트리거되 콜백은 유형의"프롬프트에".

다른 팁

구글은 항상 처음부터 끝까지 간 상태의'메시',그를 통해 상태를'자동차'그 때 사용자는 이전의 성공에 로그인하고 그는 자동으로 로그인합니다.

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