使用gapi.load时,Google API未捕获异常

时间:2017-07-24 16:18:16

标签: javascript google-api google-signin google-developers-console gapi

当我使用这种类型的初始化时:

var auth2;
gapi.load('auth2', function() {
    gapi.auth2.init({
    client_id: 'MY_CLIENT_ID.apps.googleusercontent.com',
}).then(function(){
    auth2 = gapi.auth2.getAuthInstance();
    console.log(auth2.isSignedIn.get()); //now this always returns correctly        
    });
});

我收到以下错误:

uncaught exception: gapi.auth2.ExternallyVisibleError: Missing required parameter 'client_id'  (unknown)
TypeError: auth2 is undefined

但如果我使用元标记初始化

<meta name="google-signin-client_id" content="MY_CLIENT_ID.apps.googleusercontent.com">

这样可行,但 auth2.isSignedIn.get()给了我不一致的值。

我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可能已包含以下代码行以显示Google的登录按钮。

<div class="g-signin2" data-onsuccess="onSignIn"></div> 

如果是这样,请从您的html页面中删除它,并检查您是否仍在控制台中收到错误。

答案 1 :(得分:0)

以克里希纳的答案为基础,具体地说,您要删除data-onsuccess="onSignIn"></div>部分,然后创建一个custom button

<div id="my-signin2"></div>
<script>
    function renderButton() {
    gapi.signin2.render('my-signin2', {
        'scope': 'profile email',
        'width': 240,
        'height': 50,
        'longtitle': true,
        'theme': 'dark',
    });
    }
</script>

由于我的登录名是handled server-side,所以我添加了另一个jquery函数来重定向到后端流程,但是您可以相应地进行调整:

    <script>
    $('#my-signin2').click(function() {
        // if your sign in is handled by your backend:
        location.href = "/signin";

        // signInCallback defined in step 6.
        // auth2.grantOfflineAccess().then(signInCallback);
    });
</script>