我知道这是一个重复的问题,但我正在寻找的是特定于桌面(MacOS 和 Windows)平台的。所以,我有一个 Flutter 桌面应用程序,我们的客户可以使用它在我们的网站上登录他们的帐户。他们输入他们的电子邮件和密码,然后我取回访问令牌。现在,用于验证登录的端点通常是一个 GET 请求,它采用以下方案:{{url}}/api/oauth
带有 header {Authorization: 'Bearer {{access_token}}'}
。
现在真正的问题源于这样一个事实,即当我们在桌面应用程序中对用户进行身份验证时,我们还让他/她可以选择在我们的网站上访问他/她的帐户,这意味着在 a 上btn click
,我需要启动一个浏览器使用适当的请求参数让用户直接访问他们的帐户,而无需在浏览器中再次登录。
我所做的尝试是js
在具有以下代码的资产文件夹中加载一个文件:
function openWindowWithGetAndHeaders(url, data) {
var dataForm = postWindow.document.createElement("form");
dataForm.style.display = "none";
dataForm.target = "TargetWindow";
dataForm.method = "GET";
dataForm.action = url;
for (var key in data) {
var postData = postWindow.document.createElement("input");
postData.type = "hidden";
postData.name = key;
postData.value = data[key];
dataForm.appendChild(postData);
}
postWindow.document.body.appendChild(dataForm);
var postWindow = window.open("", "TargetWindow", "status=0,title=0,height=600,width=800,scrollbars=1");
if (postWindow) {
dataForm.submit();
} else {
alert('You must allow popups and try again to login directly to your website.');
}
}
然后使用flutter_js
包功能以openWindowWithGetAndHeaders
正确的方式调用函数url
,authorization header
如下所示:
jsBrowserLauncher =
await rootBundle.loadString('assets/open_browser.js'); // the file loads normally, the and openWindowWithGetAndHeadersis called.
final jsResult = jsRuntime
.evaluate(jsBrowserLauncher + 'openWindowWithGetAndHeaders(\'$url\', {'Authorization: $oAuth'})');
但是,使用此方法,它通常会调用该openWindowWithGetAndHeaders
函数,但随后会抛出错误并说document is not defined
;这是完全可以理解的(至少对我来说),因为document
只能在浏览器的上下文中访问。
现在,任何人都可以帮我调整它以实现我正在寻找的目标行为吗?