gapi.auth.authorize()with immediate:false不会弹出授权窗口

时间:2016-08-02 08:11:56

标签: google-apps-script

以下是一个只需要授权访问用户电子表格的JavaScript:

var CLIENT_ID = '********';
var SCOPES = [
    'https://www.googleapis.com/auth/spreadsheets'
];
function auth() {
    gapi.auth.authorize({
        client_id: CLIENT_ID,
        immediate: true,
        scope: SCOPES
    }, function(result) {
        console.log('authorize(immediate = true)');
        if (result && !result.error) {
            console.log('authorize [OK]');
        } else {
            console.log('authorize [FAILED]');
            gapi.auth.authorize({
                client_id: CLIENT_ID,
                immediate: false,
                scope: SCOPES
            }, function(result) {
                console.log('authorize(immediate = false)');
                if (result && !result.error) {
                    console.log('authorize [OK]');
                } else {
                    console.log('authorize [FAILED]');
                }
            });
        }
    });
}

我认为应该做两件事:

  1. 弹出一个登录窗口,除非用户已登录。
  2. 弹出一个窗口,请求授权访问用户的电子表格,除非之前已授予授权。授权后,应用程序应列在Connected apps & sites下,不再显示授权弹出窗口。
  3. 我正在使用两个不同的Google帐户测试此脚本。一个帐户按预期工作,我在控制台上获得以下输出:

    auth.html:17 authorize(immediate = true)
    auth.html:21 authorize [FAILED]
    auth.html:27 authorize(immediate = false)
    auth.html:29 authorize [OK]
    

    使用另一个帐户,未显示授权弹出窗口,并且始终授予授权,如果我按下“允许”或该应用程序列在已连接的应用程序&网站,但它不在那里。控制台输出完全相同。

    我使用两个浏览器完成了这些测试:

    • 版本51.0.2704.79基于8.4构建,在Debian 8.5(64位)上运行
    • Firefox ESR 45.2.0,在Debian 8.5(64位)上运行

    所以,基本上我有以下问题:

    1. 我对popups的期望是正确的还是gapi.auth.authorize()调用后面的想法是立即:true或者立即:false是不同的?
    2. 这种“行为不端”的原因是什么?是否有任何“神圣的地方”,其中应用程序被列为授权某些范围,而相同的应用程序未显示在已连接的应用程序&网站的?
    3.   

      注意:CLIENT_ID列在 OAuth下的 Google API控制台中   2.0客户端ID ,类型为 Web应用程序,所有者与上述两者完全不同。

      感谢。

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 我对弹出窗口的期望是正确的还是gapi.auth.authorize()立即呼叫背后的想法:真实还是立即:假是不同的?
    • 是的,您对弹出窗口的期望是正确的。正如在GitHub中发布的相关issue #103中所讨论的,当用户通过按钮单击(immediate:false)触发'gapi.auth.authorize'时,流程如下:
  2.   
        
    1. 显示具有权限授权的弹出窗口
    2.   
    3. 当用户接受/拒绝时,弹出窗口关闭
    4.   
    5. 而不是触发回调,TypeError出现在控制台中(无论用户是否授权应用程序处理请求的数据)
    6.   
    1. 这种“行为不端”的原因是什么?是否有任何“神圣的地方”,其中应用程序被列为授权某些范围,而相同的应用程序未显示在已连接的应用程序&站点吗
      • 在GitHub中发布的相关issue #103也可能是这种“行为不端”的原因,并且基于该主题,已经修复了这个问题,可以在GitHub post中找到。
    2. 我希望有所帮助。