Google Smartlock:当PromiseStatus:在控制台中通过Javascript挂起时该怎么办

时间:2016-09-29 09:41:33

标签: javascript android google-chrome google-smartlockpasswords

我们正在整合Google Smartlock。每当我们运行JS代码以在1个屏幕上启用智能锁时,它什么都不做。当我们手动触发它时,我们只在控制台日志中看到它。

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

javascript就像这样

<script>
        window.onload=function(e){
            var debug = true;
            var always = function() { console.log('Promise resolved: but dont understand how should process: we want/need to login') }
            navigator.credentials.get({password: true, unmediated: true, }).then(function(cred) { 
            if (cred) {
                if (cred.type == 'password') {  
                var form = new FormData();
                cred.additionalData = form;
                var url = 'domain.com/login';
                fetch(url, {method: 'POST', credentials: cred }).then(function(response) { 
                    if (response.status == 202) {
                      if (debug) { console.log('Login success; reload stopped'); exit; }
                      window.location.reload();
                    }
                    if (debug) { console.log('Server status: ' + response.status); }
                    return;
                  }).catch(function(err) { console.log('Smartlock Ajax error:'+ err); 
                  }).then(always, always);
                } // can add federated here
            } else if (typeof cred === "undefined") {
                // user clicks cancel or no credentials found
                var expiry = new Date(); expiry.setDate(expiry.getDate() + (1/3600*30));
                document.cookie="dontshowagain=true; expires=" + expiry.toGMTString();
            }
            });

        }
        </script>

问题:有谁知道这里发生了什么?

我测试了1个已保存的passwd,其中有2个已保存的passwd&#39; s。我们确实在Chrome中看到了网址旁边的小键图标。但它不会弹出或做任何事情。

帮助/建议赞赏

enter image description here

enter image description here

参考文献: https://support.google.com/accounts/answer/6160273?hl=en

1 个答案:

答案 0 :(得分:1)

您似乎要求unmediated: true强制浏览器不显示帐户选择器用户界面。

如果您存储了多个凭据或需要用户调解的一个凭据,get(...)将返回undefined,除非您允许调解(默认为unmediated: false)。

注意: 当用户退出帐户时,您的凭据应该需要调解(navigator.credentials.requireUserMediation())。