首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用没有class="g-signin2“div的google-signin时,如何使用GoogleAuth.then()

在使用没有class="g-signin2“div的google-signin时,如何使用GoogleAuth.then()
EN

Stack Overflow用户
提问于 2016-03-14 18:55:29
回答 2查看 4.7K关注 0票数 2

根据这个question的答案,我有这样的代码,它使用谷歌登录,而不使用带有g-signin2样式的div:

代码语言:javascript
复制
<html>
<head>
<meta name="google-signin-client_id" content="APP_CLIENT_ID">
</head>
<body>
  <div  id="my-signin2"></div>
    <a href="#" onclick="signOut();">Sign out</a>
  <script>
    function onSuccess(googleUser) {
      console.log('Logged in as: ' + googleUser.getBasicProfile().getName());
    }
    function onFailure(error) {
      console.log(error);
    }
    function renderButton() {
      gapi.signin2.render('my-signin2', {
        'scope': 'profile email',
        'width': 240,
        'height': 50,
        'longtitle': true,
        'theme': 'dark',
        'onsuccess': onSuccess,
        'onfailure': onFailure
      });
    }

    function signOut() {
      var auth2 = gapi.auth2.getAuthInstance();
      auth2.signOut().then(function () {
        console.log('User signed out.');
      });
    }
  </script>

  <script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
</body>
</html>

但是,我希望使用GoogleAuth.then(onInit, onFailure),以便在库初始化完成时通知我,并且可以决定更新我的视图。我也不能添加任何监听程序,以便在登录完成时得到通知。

问题是,在使用上面的代码或类引用创建按钮之前,gapi.auth2是未定义的。似乎如果没有这两个步骤中的任何一个,我就无法调用gapi.auth2.getAuthInstance()来设置侦听器,也无法获得通知我何时初始化完成的承诺。

我的问题是,我想在创建按钮之前进行初始化,看看是否需要创建登录按钮。

EN

回答 2

Stack Overflow用户

发布于 2016-03-14 23:25:31

我在类似领域的另一个问题回答了这个问题:How do I initialise Google Sign in with no login button?

答案是不使用platform.js,而是使用api.js并加载auth2:

代码语言:javascript
复制
<html lang="en">
  <head>
    <script src="https://apis.google.com/js/api.js"></script>    
    <script type="text/javascript">
        function onSignIn(googleUser) {
            console.log( "signedin");
            // Useful data for your client-side scripts:
            var profile = googleUser.getBasicProfile();
            console.log("Name: " + profile.getName());
        };

        gapi.load('auth2', function() {
            gapi.auth2.init({
                client_id: "REPLACE_WITH_YOUR_ID",
                scope: "profile email" // this isn't required
            }).then(function(auth2) {
                console.log( "signed in: " + auth2.isSignedIn.get() );  
                auth2.isSignedIn.listen(onSignIn);
                var button = document.querySelector('#signInButton');
                button.addEventListener('click', function() {
                  auth2.signIn();
                });
            });
        });
    </script>
  </head>
  <body>
    <div id="signInButton"><img src="IMAGE_FILE" /></div>
  </body>
</html>
票数 2
EN

Stack Overflow用户

发布于 2016-03-14 22:03:02

为了获得gapi.auth2,你首先需要加载它。

代码语言:javascript
复制
gapi.load('auth2', function() {
  // continuation
  gapi.auth2.init();
});

platform.js基本上加载api.js + .signin2名称空间。.signin2名称空间允许呈现按钮和小部件。但是如果你想要细粒度的控制,我不建议你使用它。

.signin2所做的是

根据用户的登录状态,当使用字符串clicked

  • render按钮时,
  • 检测类g-signin2并呈现按钮
  • 在指定的element
  • invoke登录上呈现按钮
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35985616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档