Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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 Google JS API:gapi.auth.sign回调函数问题_Javascript_Google Api - Fatal编程技术网

Javascript Google JS API:gapi.auth.sign回调函数问题

Javascript Google JS API:gapi.auth.sign回调函数问题,javascript,google-api,Javascript,Google Api,当我调用gapi.auth.sign时,它会被调用两次:在打开登录弹出窗口之前和用户单击登录按钮之后。但在这两种情况下,authResponse参数都不会更改 以下是我的代码示例: gapi.auth.signIn({ scope: 'https://www.googleapis.com/auth/plus.login', callback: function(authResponse) { console.log(authResponse); } )}; 这就是authR

当我调用gapi.auth.sign时,它会被调用两次:在打开登录弹出窗口之前和用户单击登录按钮之后。但在这两种情况下,
authResponse
参数都不会更改

以下是我的代码示例:

gapi.auth.signIn({
  scope: 'https://www.googleapis.com/auth/plus.login',
  callback: function(authResponse) {
    console.log(authResponse);
  }
)};
这就是
authResponse
对象在这两种情况下的外观

{
  client_id: /* my client id */
  cookie_policy: undefined
  error: "immediate_failed"
  error_subtype: "access_denied"
  expires_at: "1422353634"
  expires_in: "86400"
  g_user_cookie_policy: undefined
  issued_at: "1422267234"
  response_type: "token"
  scope: "https://www.googleapis.com/auth/plus.login"
  state: ""
  status: 
       {
         google_logged_in: false
         method: null
         signed_in: false
       }
 }
编辑:在登录之前,我尝试检查用户是否已在谷歌获得授权,以下是代码:

gapi.auth.authorize({
      client_id: _googleClientId,
      immediate: true,
      scope: 'https://www.googleapis.com/auth/plus.login'
    }, function(response) {
      if (response.status.signed_in) {
        connectGoogleSuccess(response);
      } else {
        gapi.auth.signIn({
          scope: 'https://www.googleapis.com/auth/plus.login',
          callback: function(authResponse) {
            console.log(authResponse);
          }
        )};
      }
    }
 );
如何在用户单击“登录”按钮后正确更改authResponse对象


(非常感谢任何帮助)

好的,这是我的解决方法

  • 首先,我使用参数
    “immediate”=true调用
    gapi.auth.authorize
    方法,所以不会显示登录弹出窗口

    gapi.auth.authorize({
    客户端id:\u谷歌客户端id,
    立即:是的,
    范围:'https://www.googleapis.com/auth/plus.login'
    },功能(回应){
    if(响应.状态.已登录){
    连接谷歌成功(回应);
    }否则{
    连接Google();
    }
    });

  • 然后我用
    “immediate”=true再次调用
    gapi.auth.authorize
    方法,这样用户就可以输入他的凭证了

    connectGoogle(){
    gapi.auth.authorize({
    客户端id:\u谷歌客户端id,
    即时:错,
    范围:'https://www.googleapis.com/auth/plus.login'
    },功能(回应){
    if(响应.状态.已登录){
    连接谷歌成功(回应);
    }
    });
    };


  • 希望这能帮助别人

    正是这个问题困扰着我。有什么解决办法吗?@Varunara,很抱歉我的反馈太长,但我已经找到了解决方案,如下所述,希望能对您有所帮助)