gpt4 book ai didi

javascript - gapi.signIn 调用多个回调

转载 作者:行者123 更新时间:2023-11-28 07:39:49 26 4
gpt4 key购买 nike

我目前正在多个位置使用应用调用 gapi.signIn 方法。

  1. 当用户登录时
  2. 当用户注册时
  3. 当用户想要将其应用帐户关联到 Google 帐户时

因此,在每个实例中都会使用不同的回调参数调用 gapi.signIn()

由于这是一个单页面应用程序,一旦执行了所有操作而无需重新加载页面,并且稍后调用上述任何方法都会导致触发每个回调。

例如。如果用户登录,然后注销并尝试创建一个新的,他们会被告知他们的谷歌帐户已经与一个帐户绑定(bind)(这是预期的行为)。但是,如果他们尝试再次登录,则会再次触发尝试创建用户时调用的先前回调,并且他们将再次被发送到说明 Google 帐户已与应用帐户绑定(bind)的页面。

用一个简单的代码示例来解释:

    var ENV = {...};

function handleClickOfButton_1() {

window.authCallback_1 = function() {
console.log('callback 1');
};

// attach callback one
gapi.auth.signIn({
clientid: ENV.APP.GOOGLE_AUTH.clientid,
scope: ENV.APP.GOOGLE_AUTH.scope,
cookiepolicy: 'single_host_origin',
callback: 'authCallback_1',
});
}

function handleClickOfButton_2() {
window.authCallback_2 = function() {
console.log('callback 2');
};

// attach callback one
gapi.auth.signIn({
clientid: ENV.APP.GOOGLE_AUTH.clientid,
scope: ENV.APP.GOOGLE_AUTH.scope,
cookiepolicy: 'single_host_origin',
callback: 'authCallback_2',
});
}

如果我单击按钮一,这会触发第一个处理程序,则将调用一次signIn方法,如果我单击第二个按钮,则将调用两个回调方法。

输出:

// click button 1
> callback 1

// click button 2
> callback 1
> callback 2

如何防止这种情况发生?我一直找不到重置方法。使用相同的回调方法名称没有帮助。覆盖窗口。[method_name] 也不起作用。

最佳答案

这就是我所做的 - 添加了一个 var counter = 0,它在回调函数的末尾递增。如果 counter > 0 回调将为 null。这样,它只添加回调函数一次(无论如何,这是预期的行为,而且令人讨厌的是,首先需要这个 hack,感谢 Google 提供了这样一个有缺陷的 API :/)。

var counter = 0;
gapi.auth.signIn({
clientid: '1234567890',
cookiepolicy: 'single_host_origin',
scope: 'profile email',
callback: counter > 0 ? null : function signInCallback(authResult) {
if (authResult['status']['signed_in'] && authResult['status']['method'] == 'PROMPT') {
var token = authResult.access_token;
// Update the app to reflect a signed in user
// Hide the sign-in button now that the user is authorized, for example:
gapi.client.load('plus', 'v1', function() {
gapi.client.plus.people.get({
userId: 'me'
}).execute(function(response) {
console.log('Do my thing here...');
});
});
} else {
// Update the app to reflect a signed out user
// Possible error values:
// "user_signed_out" - User is signed-out
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatically log in the user
console.log('Sign-in state: ' + authResult['error']);
}
counter = 1;
}
});

关于javascript - gapi.signIn 调用多个回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28199670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com