我使用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结合使用),我也会很感兴趣。