Необработанная ошибка отклонения после удаления элемента из хранилища.Обновить исправляет это - PullRequest
0 голосов
/ 24 февраля 2019

Итак, я пытаюсь разместить кнопку выхода на моем сайте, и у меня есть токен пользователя, сохраненный в localstorage, но когда нажата кнопка выхода из системы и токен удаляется из localalstorage, как только сайт перенаправляется обратно нана странице входа я получаю сообщение об ошибке Unhandled Rejection (SyntaxError): Unexpected token u in JSON at position 0

Это происходит только один раз за выход из системы.Если вы обновляете страницу, она загружается просто отлично, но, очевидно, никто не хочет, чтобы подобные ошибки на их сайте.

Токен сохраняется после входа в систему следующим образом:

async userLogin(e) {
    const { email, password } = this.state;
    const target = e.target.value
    try {
      let response = await fetch("<API URL removed for security reasons>", {
        method: "POST",
        headers: {
          Accept: "application/json",
          "Content-Type": "application/json"
        },
        body: JSON.stringify({
          email: email,
          password: password,
          uid: email
        })
      });
      let res = await response.text();
      if (response.status >= 200 && response.status < 300) {
        let accessToken = res;
        console.log(accessToken);
        localStorage.setItem("access_token", accessToken);
        this.setState({
          loginFailed: false,
          isFlipped: true,
        });
      } else {
        let error = res;
        this.setState({
          loginFailed: true
        });
        alert("Invalid login credentials");
        throw error;
      }
    } catch (error) {
      this.setState({
        error: error,
        loginFailed: true
      });
      console.log("error: " + error);

    }
  }

localStorage.setItem("access_token", accessToken);где хранится токенЯ удаляю токен, используя localStorage.removeItem("access_token") Я также пытался использовать localStorage.clear(), но он выдает ту же ошибку при возвращении к экрану входа в систему.Все, что я делаю, когда нажата кнопка выхода, это удаление токена и перенаправление на экран входа в систему, ничего сложного.

 const logOut = () => {
    localStorage.clear()
    console.log(localStorage)
    return <Redirect to="/login"/>
  }

Ошибка возникает, когда корневая страница анализирует локальное хранилище, чтобы проверить токен.Вот источник сообщения об ошибке:

  componentWillMount() {
    const hasToken = JSON.parse(localStorage.access_token)
    if (hasToken.token_info.token !== null) {
      this.setState({
        authenticated: true
      })
    }   
  }

1 Ответ

0 голосов
/ 24 февраля 2019

Это происходит потому, что localStorage.access_token возвращает undefined и синтаксический анализ undefined с JSON.parse выдает ошибку.Таким образом, вы можете проверить как

const hasToken = localStorage.access_token ? JSON.parse(localStorage.access_token) : null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...