Приложение React не может войти в Keycloak по истечении срока действия токена, бесконечный цикл, ошибка обновления токена

#reactjs #keycloak

#reactjs #keycloak

Вопрос:

Я использую Keycloak для аутентификации пользователя в моем приложении React с помощью keycloak-js и @react-keycloak / web libs.

Когда я запускаю приложение, оно перенаправляет меня на страницу входа в keycloak, а затем обратно после ввода логина / пароля.

Я получаю токены: доступ, обновление и т. Д. И устанавливаю для них значение cookie.

Но затем, когда срок действия токена доступа истекает, я думаю, начинается что-то странное для меня: скриншот сети Chrome devtools

Приложение получает токен, но со страницы учетной записи (http://localhost:8080/auth/realms/my_pim/account ) он получает статус 401 (несанкционированный). После этого он не может получить новый токен, но затем каким-то образом получает его и снова получает 401 со страницы учетной записи. И проходит через бесконечный цикл перенаправления. В консоли сервера keycloak я вижу это.

Я не знаю, что с этим делать.

Мой код:

keycloak.ts

 import keycloak, { KeycloakInstance } from 'keycloak-js';


const currentConfigName = process.env.NODE_ENV === 'production' ? 'prod' : 'dev';

const keycloakClient: KeycloakInstance = keycloak(`/keycloak/config.${currentConfigName}.json`);


export default keycloakClient;
  

config.dev.json

 {
   "realm": "my_pim",
   "auth-server-url": "http://localhost:8080/auth/",
   "ssl-required": "external",
   "resource": "pim_test",
   "public-client": true,
   "confidential-port": 0
}
  

App.tsx

 import { ReactKeycloakProvider } from '@react-keycloak/web';
import keycloak from './keycloak';

import Cookies from 'universal-cookie';


const App = (): any => {
  const dispatch = useDispatch();

  const cookies = new Cookies();

  const eventLogger = (event: unknown, error: unknown) => {
      console.log('onKeycloakEvent', event, error);
  };

  const tokenLogger = (token: any) => {
      if (token.token) {
          console.log('onKeycloakTokens', token);
          cookies.remove('user_token');
          cookies.set('user_token', token.token, { path: '/' });
          dispatch(actions.setAuth(true));
      }
  };

  return (
      <BrowserRouter>            
          <ReactKeycloakProvider
          initOptions={{ onLoad: 'login-required' }}
          onTokens={tokenLogger}
          onEvent={eventLogger}
          authClient={keycloak}>
              <div className="app-wrapper">
                // my components here
              </div>
          </ReactKeycloakProvider>
      </BrowserRouter>
  );
};

export default App;
  

Комментарии:

1. Хм, вы решили это?

2. @musicformellons да. Моя маршрутизация (<Switch>, <Route> и т. Д. С помощью react-router-dom) Была установлена неправильно, lol. Это вызвало бесконечное обновление.