等待Firebase Promise完成,然后复制到剪贴板

时间:2019-01-03 09:30:58

标签: javascript firebase firebase-authentication

我使用Postman通过我们的REST API进行管理工作,这需要JWT进行身份验证。使用Android / Web应用程序获取和使用JWT并不是问题,但是要手动调用API,需要我复制JWT并将其粘贴到Postman中。

为此,我编写了一个简单的页面,该页面使用Firebase-UI让我使用Firebase身份验证登录,然后使用以下代码将JWT复制到剪贴板:

const copyToClipboard = function(str) {
    const el = document.getElementById('clippy');
    if (currUser != null) {
        currUser.getIdToken(true).then(token => {
            el.value = 'bearer ' + token;
        }, error => { console.log("Error: " + error);});
        el.select();
        document.execCommand('copy');
        console.log("Copying done!")
    } else {
        console.log("No user set, hence no token.");
    }
};

哪里

    <textarea id="clippy" style="position:absolute; left: -9999px;"></textarea>
    <button onClick="copyToClipboard();">Copy Token</button>

在其他地方,我正在使用firebase.auth().onAuthStateChanged()来设置currUser的值。

问题是document.execCommand('copy');行通常在then的{​​{1}}部分完成之前运行,因此剪贴板中没有有效的JWT。我试图通过将复制到剪贴板的hack放在Promise中来解决此问题:

then

,但是复制到剪贴板的黑客无效。

理想情况下,我希望使用纯Java脚本的方式来等待const copyToClipboard = function(str) { const el = document.getElementById('clippy'); if (currUser != null) { currUser.getIdToken(true).then(token => { el.value = 'bearer ' + token; el.select(); document.execCommand('copy'); console.log("Copying done!") }, error => { console.log("Error: " + error);}); } else { console.log("No user set, hence no token."); } }; 完成 后再运行复制到剪贴板的黑客程序。

如果有一个针对根本问题的完全不同且更好/更优雅的解决方案(将Firebase Auth JWT与Postman结合使用),我也会很感兴趣。

0 个答案:

没有答案