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

Razor 谷歌登录未返回错误,也未登录,razor,google-signin,Razor,Google Signin,我正试图让谷歌登录在我的内联网站上工作,该网站目前使用集成的windows身份验证-我想摆脱它,因为我需要支持ChromeBooks,这里的几乎所有东西都是谷歌的 这就是工作原理: 我有一个登录按钮。我可以在控制台日志中看到它正在使用我的google developer客户端id: XHR已完成加载:获取“…d=777682448638-5tpyaddyadddarvnbr3p6.apps.googleusercontent.com” 如果我在没有登录谷歌的机器上点击按钮,我会得到一个登录

我正试图让谷歌登录在我的内联网站上工作,该网站目前使用集成的windows身份验证-我想摆脱它,因为我需要支持ChromeBooks,这里的几乎所有东西都是谷歌的

这就是工作原理:

  • 我有一个登录按钮。我可以在控制台日志中看到它正在使用我的google developer客户端id:
XHR已完成加载:获取“…d=777682448638-5tpyaddyadddarvnbr3p6.apps.googleusercontent.com”

  • 如果我在没有登录谷歌的机器上点击按钮,我会得到一个登录谷歌的提示

  • 如果我在登录谷歌但之前未访问过该网站的计算机上单击该按钮,我将获得与我的web应用程序共享的电子邮件和个人资料的授权请求

    • 如果我已经完成了上述操作,并单击按钮,则会出现一个弹出窗口,立即消失
什么不起作用:

  • 我的网站从来没有获得任何成功回来。。。。。。。所以按钮总是显示“使用谷歌登录”我没有进入“以莫莉身份登录……”的下一步
这是我的代码的一个简短版本-请注意,现在我的网站使用的是集成的windows身份验证-这就是我尝试移植的内容,以便我们可以使用Chromebook和其他不使用windows登录的计算机

这是来自my_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>
从控制台的结果中,我可以看到我的网站和我的客户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"
使用JavaScript客户端库,您可能应该使用侦听器来检查客户端的状态。我不确定您是如何渲染按钮的,但您可能需要仔细查看按钮

尽管我发现使用侦听器比使用成功回调有优势,但以下代码对我来说很有用(我在使用包含授权响应的
z
变量登录时看到
onWin
):

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


auth2.isSignedIn.get()
返回
true
时,您可以使用
auth2.currentUser.get()
检索当前登录用户的配置文件数据。

在本地主机上测试时,我也遇到类似问题。当我把我的代码推到我的生产服务器上时,谷歌提供的简单示例就像广告中所宣传的那样完美地工作。即使页面刷新后,按钮的值也会相应更改或保持不变。

也许您的浏览器配置为阻止第三方cookie。如果是,请禁用该功能。您可能还希望在登录页面上有一个说明,说明需要第三方cookie,以便您的用户知道如何进行同样的操作。

是否没有错误响应?是否没有错误-我认为没有检测到onError和OnSuccess-这使我想他们可能没有真正登录,或者知道我的帐户是谁是的,但是信息不会回来。嗨,同学们,我从中得到了一个奇怪的结果。我假设代码行应该是这样的:所有java的东西,我对函数进行了onload调用。continued-然后我用gapi.load('auth2',function()替换了我的函数调用{………..然后发生的事情是我没有按钮。这对我来说,呈现按钮工作正常-点击按钮可以让我进入同意屏幕,但之后的位不起作用。现在回到谷歌开发者端,我只有一个URL,我没有重定向URL集-这是开发者的指南我甚至不能设置重定向,因为我的站点是一个内部站点,并且不以配置工具现在似乎需要的.org或.com结尾。您的脚本src看起来有点不正常,请尝试
如果您希望它在加载后执行回调,请在遇到的onload参数
中传递函数名脚本加载时出现问题,因为您没有加载所有必需的库,并且查询参数为空。由于重定向流的工作方式,重定向URI不能是非公共的。您可以使用postmessage流,如上特定语言(Go、PHP、.NET、Ruby等)示例所示。
 function signIn() {
    var auth2 = gapi.auth2.getAuthInstance();
    console.log(auth2);
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"
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());
}