#reactjs #auth0
#reactjs #auth0
Вопрос:
У меня есть следующий компонент React, который я основал на этой документации на веб-сайте Auth0
вот мой код, в котором я пропустил несколько несвязанных строк
import * as Auth0 from "@auth0/auth0-react";
import * as React from "react";
import * as ReactRedux from 'react-redux';
interface IProps{.....}
const AppComponent: React.SFC<IProps> = (props) => {
const { getAccessTokenSilently } = Auth0.useAuth0();
React.useEffect(() => {
(async () => {
try{
const token = await getAccessTokenSilently();
console.log(token);
Props.setAccessToken(token); // this is a dispatch to save the token into redux state
}
catch(error){console.log(error);}
})();
}, [getAccessTokenSilently]);
return(
<> /*some jsx */ </>
);
}
const mapDispatchToProps //standard redux mapping
const mapStateToProps // standard redux mapping
export default ReactRedux.connect(mapStateToProps,mapDispatchToProps)(AppComponent);
поведение, которое я получаю, заключается в том, что после того, как компонент отобразит его, он регистрирует токен на консоли, однако после истечения срока действия токена useffect не происходит, чтобы получить новый токен, чего я и пытаюсь достичь. любая идея, что может быть неправильным, или если есть лучший способ добиться результата обновления токена доступа по истечении срока, при этом он тесно связан с конкретным действием.
Редактирование 1: я пропустил добавление, что обновление токена с интервалами невозможно, это будет поставляться как единый продукт для разных клиентов, и у каждого клиента есть свой собственный клиент Auht0, я не могу предположить определенный срок службы токена
Ответ №1:
Я использую созданный мной хук, вызываемый useInterval
для обновления токена в фоновом режиме через определенные промежутки времени.
useInterval.ts
import { useCallback, useEffect } from "react";
export const useInterval = (func: () => void, delay: number, startImmediately: boolean, funcDeps: React.DependencyList) => {
const callback = useCallback(func, funcDeps);
useEffect(() => {
const handler = setInterval(callback, delay);
startImmediately amp;amp; callback();
return () => clearInterval(handler);
}, [callback, delay, startImmediately]);
}
Использование в компоненте приложения
useInterval(() => {
// code to update access token
}, 300000, true, [dependencies]);
Комментарии:
1. я пытаюсь избегать интервалов, поскольку это приложение будет развертываться для разных клиентов, и у каждого клиента будет свой собственный срок службы токена доступа, и я не могу ожидать, что пользователи будут знать время жизни
2. Вы могли бы установить интервал на основе истечения срока действия токена и сделать его динамическим.
3. это стоит попробовать, я протестирую и дам вам знать
4. просто обновить настройку динамических интервалов оказалось непростым испытанием, поэтому пока я проигнорировал этот пункт, однако, если вы продолжите свою помощь и покажете мне пример с динамическими интервалами, исходящими от токена, я был бы благодарен