谷歌登录未返回错误也未登录

时间:2015-06-17 15:17:06

标签: razor google-signin

我正在尝试让google登录我的Intranet网站上的工作,该网站目前使用集成的Windows身份验证 - 我想摆脱它,因为我需要支持ChromeBooks,而且几乎所有这里都是google ......

这就是IS的工作:

  • 我有一个登录按钮。我可以在控制台日志中看到它正在使用我的谷歌开发者客户端ID:

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

  • 如果我点击我未登录google的计算机上的按钮,我会立即提示登录谷歌。

  • 如果我点击我登录谷歌但未访问此网站的计算机上的按钮,那么我将收到我的电子邮件和个人资料的授权请求,以便与我的网络应用程序共享。

    • 如果我已完成上述操作,然后点击按钮,则会有一个弹出窗口的闪光灯立即消失。

什么不起作用:

  • 我的网站从未获得任何onSuccess .......所以按钮总是说“用Google登录”我没有进入下一步“以莫莉的身份登录......”

这是我的代码的缩写版本 - 请注意,现在我的网站使用集成的Windows身份验证 - 这就是我想要移除的地方,因此我们可以使用ChromeBook和其他未使用我们的Windows登录的计算机

这是来自我的_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>

如果我在Chrome中打开“检查元素”,我可以看到它在网络选项卡下显然已经关闭,并且有些人会去谷歌。在控制台选项卡中,我只看到XHR已完成加载:获取“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"

3 个答案:

答案 0 :(得分:0)

使用Google Sign-In (gapi.auth2) JavaScript客户端库,您可能应该使用侦听器来检查客户端的状态。我不确定您是如何呈现按钮的,但您可能想要好好看一下Google Sign-in quickstart

虽然我发现使用侦听器比使用成功回调更有优势,但以下代码适用于我(我在使用包含授权响应的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());
          });
});

登录更改时执行操作(例如,显示/隐藏授权的用户界面):

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

auth2.isSignedIn.get()返回true时,您可以使用auth2.currentUser.get()检索当前登录用户的个人资料数据。

答案 1 :(得分:0)

在localhost上测试时遇到了类似的问题。当我将代码推送到我的生产服务器上时,Google提供的简单示例与广告宣传完美。即使页面刷新后,按钮的值也会相应更改或保持不变。

答案 2 :(得分:0)

也许您的浏览器配置为阻止第三方Cookie。如果是,请禁用该功能。您可能还希望在登录页面上注明需要提供第三方cookie,以便您的用户知道这样做。