Реакт 16.4.0 Контроль кэша во время последовательности входа OAuth2 - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь настроить последовательность входа в OAuth2.0 в приложении activjs. Бег от Хрома. Приложение реагирования проверяет, есть ли у него токен доступа или TGT, и, если оно не имеет ни одного, перенаправляет на имя входа OAuth2.0. Похоже, проблема заключается в том, что при успешном входе пользователя в систему кэширование, управляемое E-Tag, вызывает ответ «Не изменено (304)», поэтому страница входа в систему не отображается. Когда сервер OAuth2.0 получает код 304 в ответ на попытку перенаправления, я получаю ответ «не авторизован для этого приложения».

Так что мой реагирует JSX, для фильтра изменения аутентификации имеет:

componentDidMount() {
        if (AuthFilter.getStoredToken()) { // do nothing if we already have a token
            this.setState({ visible: true });
        } else {
            let tgt = this.tokenQuery();

            if (!tgt) { // Need to re-direct to cas
                window.location.href = this.buildLoginUrl();
            } else { // we have tgt - fetch access token
                this.fetchAccessToken(tgt).then((token) => {
                    let props = token.data.split(/&/);
                    let auth = props[0].substring(13);
                    window.sessionStorage.setItem('auth-token', auth);
                    this.removeCodeFromURL();
                    this.setState({ visible: true });
                }).catch((error) => {
                    console.log('Access error: ' + error);
                });
            }
        }
    }

Предполагаемый поток:

  • Первый вызов для реагирования SPWA не находит токены доступа.
  • Перенаправляет на авторизацию вызова на сервере аутентификации.
  • Сервер предоставляет пользователю страницу входа в систему.
  • Пользователь входит в систему
  • Успешная страница входа перенаправляет на обратный вызов. Авторизация
  • callbackAuthorize перенаправляет обратно в SPWA, добавляя код =
  • Фильтр видит код и использует его для получения токена доступа.

Эта ошибка не срабатывает с первой попытки. Однако OAuth2.0 запоминает логин, и если вы возвращаетесь на первую страницу, он собирает токен OK.

Я думаю, что я хочу отключить кэширование для первого перенаправления, чтобы пустая страница не кэшировалась. Но вы не можете установить заголовки, AFAIK, когда делаете перенаправление из Javascript.

Теперь все советы, которые я видел на этой доске относительно управления кэшированием реагирования, касаются регистрации сервисных работников в index.js. Только одна проблема, у моего проекта нет index.js. Все в jsx, и я не могу найти упоминаний о работниках сферы обслуживания. Если сервисные работники регистрируются, они где-то зарыты в коде реактивной плиты котла. Реагирует на версию 16.4.0

...