我目前有一个反应功能组件,它使用 ReactiveSearch 搜索弹性搜索索引。Elasticsearch 位于一个代理之后,该代理负责使用 Auth0 进行身份验证。
基于此,我需要Authorization
在每个弹性搜索请求中发送一个额外的标头。
我有以下钩子,它负责从 auth0 检索 idToken:
const useIdToken = (): { idToken: IdToken | undefined, isDone: boolean } => {
const [idToken, setIdToken] = useState<IdToken>();
const [isDone, setIdDone] = useState<boolean>(false)
const {
isLoading,
isAuthenticated,
getIdTokenClaims,
} = useAuth0();
useEffect(() => {
console.log('auth0 is autenticated: ' + isAuthenticated + " is loading: " + isLoading)
const getIdToken = async () => {
const res = await getIdTokenClaims();
setIdToken({
...res,
});
setIdDone(true)
};
getIdToken();
}, [isLoading, isAuthenticated]);
return {
idToken,
isDone,
};
};
export default useIdToken;
然后我使用 ReactiveSearch 的功能组件执行以下操作:
const SearchPage = () => {
const { idToken, isDone } = useIdToken();
return (
<MainLayout>
{
isDone && <ReactiveBase
app=“Index"
url="http://192.168.2.108:9200"
headers={{
Authorization: `Bearer ${idToken?.__raw}`
}}
>
/// ReactiveSearch components
</ReactiveBase>
}
</MainLayout>
);
};
export default SearchPage;
这样做的结果是正在发送 Authorization 标头,因为Bearer undefined
当钩子中的状态发生变化时,组件似乎没有刷新。
相同的钩子useIdToken
被用于另一个功能组件并且它按预期工作。
我不确定我是否做错了什么,或者是否是 ReactiveBase 组件对钩子中的状态更改没有反应useIdToken
。