syl*_*ama 10 javascript callback google-api google-plus google-oauth
我正在开发一项功能,允许用户使用他们的Google帐户登录我的网站.
我的代码基于Google文档(其他signIn()选项位于元标记中).
function login() {
gapi.auth.signIn({'callback':
function (authResult) {
if (authResult['status']['signed_in']) {
console.log('Okay');
}else {
console.log('Error');
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
当我调用login()时,会出现Google弹出窗口,我批准了我的应用程序的条款,一切正常.
但回调被调用两次:
我'approvalprompt': 'force'在signIn()函数中添加了选项.回调函数不再被调用两次,但它会强制用户批准应用程序的权限,即使之前已批准.所以它不是用户友好的.
是否有友好的用户方式来批准应用程序的权限一次没有两个回调?
谢谢.
我在这里遇到同样的问题,但是我通过按钮点击处理程序调用gapi.auth.signIn().回调仍然被调用两次.我注意到两个authResult对象之间的一件事是authResult.status.method在第一次调用中是'AUTO'(在弹出窗口出现之前)并且在窗口被自动关闭之后在第二次调用中是'PROMPT'授权.
我现在正在探索的解决方案是忽略AUTO实例并仅处理回调的PROMPT实例.由于"状态"对象上的文档中缺少详细信息,因此在我撤消Google中的权限后,我不确定这是如何工作的.
我面临同样的问题:如果用户已经授予权限,则签名回调两次; 局部变量方法(initializedGoogleCallback)对我不起作用,因为它仅在用户已经授予访问权限时调用回调一次,但如果用户是新用户则不调用它.经过一些研究(我特别是使用g + auth在网站上挖掘)后,我发现所有人都使用了这些,'approvalprompt': 'force'并且他们已经授权用户每次都重新批准"离线访问"政策.即使我按照设置我的应用程序(https://developers.google.com/+/web/signin/javascript-flow)的谷歌示例即使它没有提及它,它也使用"force"参数.目前它似乎是唯一的解决方案,如果你想使用javascript流(这意味着你需要一个个人风格的登录按钮)
尝试在某个局部变量中注册第一个调用,然后处理它
这个快速解决方案可以帮助我:
function login() {
var initializedGoogleCallback = false
gapi.auth.signIn({
'callback': function (authResult) {
if (!initializedGoogleCallback) {
// after first call other will be ignored
initializedGoogleCallback = true;
if (authResult['status']['signed_in']) {
console.log('Okay');
} else {
console.log('Error');
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
您也可以在调用gapi.auth.signIn之前添加以下代码
window.removeEventListener('load')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9008 次 |
| 最近记录: |