Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript gapi.auth.authorize回调不';通过Google on node webkit应用程序登录时不会被呼叫_Javascript_Google Oauth_Node Webkit_Google Api Java Client_Google Login - Fatal编程技术网

Javascript gapi.auth.authorize回调不';通过Google on node webkit应用程序登录时不会被呼叫

Javascript gapi.auth.authorize回调不';通过Google on node webkit应用程序登录时不会被呼叫,javascript,google-oauth,node-webkit,google-api-java-client,google-login,Javascript,Google Oauth,Node Webkit,Google Api Java Client,Google Login,从节点webkit应用程序登录时出现问题。在node webkit应用程序中,我使用以下代码在我的域上打开一个页面: <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <link rel="stylesheet" src="style.css" /> <script src="//ajax.googleapis.co

从节点webkit应用程序登录时出现问题。在node webkit应用程序中,我使用以下代码在我的域上打开一个页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8' />
        <link rel="stylesheet" src="style.css" />
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <script type="text/javascript">
             var CLIENT_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
             var SCOPE = 'https://www.googleapis.com/auth/userinfo.email';               

            function authorization() {
                   gapi.auth.authorize({
                     client_id: CLIENT_ID,
                     immediate: false,
                     scope: SCOPE
                   }, function(authResult) {
                        alert('CALLBACK');
                      }
                   );
                 }
        </script>       
        <script src="https://apis.google.com/js/client:platform.js?onload=authorization"></script>
        <title>Google Sign In</title>
    </head>
    <body></body>
</html>

var客户端ID='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var范围=https://www.googleapis.com/auth/userinfo.email';               
功能授权(){
gapi.auth.authorize({
客户id:客户id,
即时:错,
范围:范围
},函数(authResult){
警报(“回调”);
}
);
}
谷歌登录
由于某些原因,在节点webkit上运行时,回调永远不会触发。在调试时,我看到了一些奇怪的东西。当我从NodeWebKit运行此代码时,此代码将打开google登录屏幕。当节点webkit开发者控制台为google页面打开时,回调将成功触发


当我在chrome上加载相同的页面时,回调会触发,我可以看到警报,所以我认为问题不在于代码。在运行这段代码之前,我以编程方式清理了节点webkit缓存,因此每次都需要用户输入其凭据。

最终我使用不同的方法解决了这个问题。由于这个问题至今已有两个多月没有得到回答,我将描述我使用的解决方法

我没有使用GoogleJS库进行登录,而是使用服务器端身份验证。我选择了那个。这是我使用的流程:

  • 在NodeWebKit中,我在一个新窗口上从服务器打开了一个页面(php)

    exports.login_window = window.open(url,{
        "position": "center",
        "focus": true
    });
    
  • 使用GoogleSDK,我生成了一个身份验证链接,并将客户端重定向到该链接

    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setRedirectUri($redirect_uri);
    $client->addScope("https://www.googleapis.com/auth/userinfo.email");
    $authUrl = $client->createAuthUrl();
    header('Location: '.$authUrl);
    
  • 经过身份验证后,客户端重定向回我的服务器

  • 我使用谷歌API查询了我需要的所有信息。然后我将信息存储在文档会话中

    "sessionStorage.google_data = ".json_encode($data).";"
    
  • 从最初的页面(当我打开登录窗口时),我轮询了新的窗口会话,一旦google_数据出现,我就拉它并关闭窗口

    if (
        typeof exports.login_window == "undefined" ||
        exports.login_window.window == null ||
        typeof exports.login_window.window.sessionStorage == "undefined" ||
        typeof exports.login_window.window.sessionStorage.google_data == "undefined" ) {
        setTimeout(function(){
            check_3p_login();
        },200);
    } else {
        var google_data = exports.login_window.window.sessionStorage.google_data;
       // rest of the code
    }