在不返回错误还没有签约谷歌标志(google sign in not returning error

2019-10-23 09:52发布

我试图让谷歌标志,其中当前使用集成Windows身份验证在我的Intranet站点的工作 - 我想从那个了,因为我需要支持的Chromebook和这里几乎一切都将谷歌......

这就是工作:

  • 我得到了按钮的标志。 我可以在控制台日志中看到,它是用我的谷歌开发的客户端ID:

XHR加载完成:GET “ https://accounts.google.com/o/oauth2/iframerpc?action=checkOrigin&origin=ht ... d = 777682448638-5tpyaddayaddyadddarvnbr3p6.apps.googleusercontent.com”。

  • 如果我点击我在哪里没有登录到谷歌的机器上的按钮,我会木屐提示登录到谷歌。

  • 如果我点击这里我登录到谷歌,但没有访问此网站在此之前我会得到我的电子邮件和配置文件的授权请求与我的Web应用程序共享一台机器上的按钮。

    • 如果我做了上述情况,并单击该按钮则是马上消失的弹出窗口的闪光。

什么是不工作:

  • 我的网站从来没有得到任何的onSuccess回来.......使按键总是说“在与谷歌”我没有得到下一步“签名作为莫莉......”

这里是我的代码shortended版本 - 请注意,现在我的网站使用集成Windows身份验证 - 这就是我试图端口远离,所以我们可以使用不使用我们的Windows登录Chromebook和其他电脑。

这是从我的_Layout.cshtml页

    @{
        var username = WebSecurity.CurrentUserName;
    }

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Rutland City Public Schools - ACADEMIC SITE</title>
        <link href="~/Styles/Styles.css" rel="stylesheet" type="text/css"/>
        <link href="~/Styles/PrintStyles.css" rel="stylesheet" type="text/css" media="print"/>
        <meta http-Equiv="Cache-Control" Content="no-cache">
        <meta http-Equiv="Pragma" Content="no-cache">
        <meta http-Equiv="Expires" Content="0">
        <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
        <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
        @RenderSection("script", required: false)
        <meta name="google-signin-scope" content="profile email">
        <meta name="google-signin-client_id" content="777682448638-5tpyaddayaddayaddavnbr3p6.apps.googleusercontent.com">

    </head>

    <body>

          <div id="topRight">  
              Hello: @username   <br> <br> 

                <div id="my-signin2" align="center" ></div>
                  <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': 'https://www.googleapis.com/auth/plus.login',
                        'width': 150,
                        'height': 30,
                        'longtitle': true,
                        'theme': 'light',
                        'onsuccess': onSuccess,
                        'onfailure': 'oops!'
                      });

                    }
                  </script>

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

              ignore google button!
          </div>

          <div id="mainContent">
               @RenderBody()
          </div> 

    </body> 

    </html>

如果我打开了“检查元素”当我在铬我可以看到网络选项卡上清楚熄灭,做一些获取到谷歌下。 在控制台选项卡中我只看到XHR加载完成:GET“ https://accounts.google .................”的消息。

这里发生了什么? 为什么我没有得到的onSuccess?

谢谢!!!!

增加了更多的注意事项:

我添加了一个链接:

 <a href="#" onclick="signIn();">Sign in</a>

调用此函数:

 function signIn() {
    var auth2 = gapi.auth2.getAuthInstance();
    console.log(auth2);

从控制台的结果,我可以看到我的网站,我的客户ID,但我再次看到任何关于我的实际用户。

jF {zd: Object, po: "single_host_origin", zt: true, ha: true, G: undefined…}
B: bY
B: "777682448638-5tp3rss17g1qarc3em0opcr4rvnbr3p6.apps.googleusercontent.com"
Db: "http://rcps"
Ei: undefined
El: undefined
G: "google"
Ka: false
Ld: Object
openid.realm: undefined
redirect_uri: "http://rcps/academic/academic"
response_type: "token id_token"
scope: "openid profile email"

Answer 1:

随着谷歌登录(gapi.auth2) JavaScript客户端库,你或许应该使用监听器检查客户端的状态。 我不知道你究竟是如何呈现的按钮,但你可能想在一个很好看谷歌登入快速入门 。

虽然我用的听众有超过使用成功回调优势发现,下面的代码对我的作品(我看onWin后登入与z包含授权响应变量):

function onFail(z){ alert('Fail' + JSON.stringify(z)); }                                                                                  
function onWin(z){ alert('Win' + JSON.stringify(z)); }
gapi.load('auth2', function() {
  gapi.signin2.render('signin-button', {
    scope: 'https://www.googleapis.com/auth/plus.login',
    onsuccess: onWin,                                                     
    onfail: onFail,   
    fetch_basic_profile: false });
  gapi.auth2.init({fetch_basic_profile: false,
      scope:'https://www.googleapis.com/auth/plus.login'}).then(
          function (){
            console.log('init');
            auth2 = gapi.auth2.getAuthInstance();
            auth2.isSignedIn.listen(updateSignIn);
            auth2.then(updateSignIn());
          });
});

做事情时登录的变化(例如显示/隐藏授权UI):

var updateSignIn = function() {
  console.log('update sign in state' + auth2.isSignedIn.get());
}

而此时任何一点auth2.isSignedIn.get()返回true ,你可以使用auth2.currentUser.get()来检索文件数据为当前登录用户。



Answer 2:

在本地主机上测试,当我有类似的问题。 当我把我的代码到我的生产服务器由谷歌提供的简单的例子非常完美像宣传的那样。 按钮的值发生变化,甚至后刷新页面相应停留。



Answer 3:

也许你的浏览器配置为阻止第三方Cookie。 如果是这样,禁用该功能。 您可能还需要对您的登录页面提的是,第三方Cookie是必需的,这样用户就知道做同样的说明。



文章来源: google sign in not returning error also not signing in