Google+ oauth2回调多次触发

时间:2014-12-02 16:40:34

标签: javascript oauth oauth-2.0 google-plus google-oauth

我有以下代码片段:

var myParams = { 
'clientid' : 'XXXXX.apps.googleusercontent.com', 
'cookiepolicy' : 'single_host_origin', 
'callback' : _.bind(function(response){ this._loginGoogleCb(response); }, this), 
            'scope' : 'https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.profile.emails.read', 
            'requestvisibleactions' : 'http://schemas.google.com/AddActivity' 
        }; 
gapi.auth.signIn(myParams); 

第一次单击按钮并执行此代码时,没有问题 但是当我第二次单击该按钮时,回调(并且只有回调)会被执行两次 每次执行此代码时,对Google服务器(以及相关回调)的请求数量都会增加1.

我仔细检查过,调用函数本身只在重复时执行一次 按钮单击本身不是问题。

知道可能是什么问题吗?

1 个答案:

答案 0 :(得分:2)

this文章中可以看出,有三种不同的状态方法:

  • 提示
  • AUTO
授权对象中的

{
  "id_token": string,
  "access_token": string,
  "expires_in": string,
  "error": string
  "status": { /* object */
    "google_logged_in" : boolean,
    "signed_in" : boolean,
    "method" : string /* null, PROMPT, or AUTO */
  }
}

正在发生的事情是,当您第一次登录时,只会触发其中一种状态方法(“PROMPT”),但当再次按下该按钮时会触发两种状态方法(“PROMPT”和“AUTO”)。

可以找到用于处理这些状态方法的示例“signinCallback”代码here

此外,如果您多次调用下划线的绑定功能,则绑定功能也将被多次调用。因此,您看到“对Google服务器(以及相关回调)的请求数量增加的原因为1”。我建议将这个调用封装在另一个函数中,并包含一个保护条件来阻止多次调用。