reactjs - 如何传递 MSAL 访问令牌以响应弹性搜索 App 连接器
问题描述
AM 试图获取 MSAL 的访问令牌以传递给我们的后端 API(最终调用 APP Search)。由于访问令牌来自 msal 承诺,我无法在全局某处初始化令牌并在其他函数中访问。有没有办法等到承诺完成?
这是一些代码:
export default function App() {
const isAuthenticated = useIsAuthenticated();
const {instance, accounts, inProgress} = useMsal();
const { hostIdentifier, searchKey, endpointBase, engineName } = getConfig();
if (!isAuthenticated && inProgress === InteractionStatus.None) {
instance.loginRedirect(loginRequest).catch(e => {
console.error(e);
});
}
const connector= null;
if( accounts[0]){
const request = {
...{scopes:['api://.....']},
account: accounts[0]
};
console.log('Before access token');
getAccessToken(request);
//console.log(`After access token ${accessToken}`);
}
let config;
async function getAccessToken(request){
const accessTokenPromise = await instance.acquireTokenSilent(request);
const searchKey = accessTokenPromise.accessToken;
const connector = new AppSearchAPIConnector({
searchKey,
engineName,
hostIdentifier,
endpointBase,
});
console.log('After COnnector'+connector);
config = {
searchQuery: {
facets: buildFacetConfigFromConfig(),
...buildSearchOptionsFromConfig(),
},
autocompleteQuery: buildAutocompleteQueryConfig(),
apiConnector: connector,
alwaysSearchOnInitialLoad: false,
};
}
return (
<PageLayout>
<AuthenticatedTemplate>
<SearchProvider config={config}>
<WithSearch
mapContextToProps={({ wasSearched }) => ({ wasSearched })}
........
使用此代码,出现以下错误:
Events.js:16 Uncaught 未提供 onSearch 处理程序,也未提供连接器。您必须配置其中一个。
任何想法,关于如何将访问令牌传递给 App 连接器?
解决方案
是的,有一种方法可以等到承诺完成。您可以在 promise 之前使用 await 关键字,当您使用 await 关键字时,您必须在函数声明中添加 async 关键字,因为在 promise 代码之前使用 await 关键字时需要添加 async 关键字。
当您完成承诺并使用 await 关键字时,您可以将访问令牌存储在某个变量中,最后将其发送到应用程序连接器。
推荐阅读
- arrays - 如何将变量存储在不同文件的数组中
- html - 已更改(但未添加/删除)的内容的正确 HTML 标记是什么?
- ibm-watson - Watson Language Translator 服务是否支持不应翻译的变量
- winapi - 如何获取当前机器的 SID?
- php - Windows 上的 PHP 或 Python 向远程 Linux 堆栈发送命令
- sql - oracle 中的 CASE WHEN 表达式
- android - 任务 ':app:kaptGenerateStubsFossDebugKotlin' 执行失败。> 内部编译器错误
- javascript - 我可以为同一个 es lint 规则强制执行多个级别吗?例如:不同路径的错误和警告
- compression - 使用 DEFLATE 压缩文本文件时,需要多少数据才能减小大小?
- c - 在给定的 BST 中查找最大子树,使其没有重复项