Необработанный отказ (InvalidTokenError) Использование asyn c и ожидание - PullRequest
0 голосов
/ 14 января 2020

Несмотря на использование await в нужном месте и отлов любых возможных ошибок, когда токен не определен, следующая функция выдает ошибку «Необработанное отклонение (InvalidTokenError): Указан неверный токен: Невозможно прочитать свойство« заменить »из неопределенного»:

async function authenticateUsingExistingToken() {
  const userToken = localStorage.FBIdToken;
  if (userToken) {
    const decodedToken = jwtDecode(userToken);
    if (decodedToken.exp * 1000 < Date.now()) {
      resetUserContext();
      localStorage.FBIdToken = "";
    } else {
      axios.defaults.headers.common["Authorization"] = userToken;
      try {
        const responseObj = await axios.get("/user");
        setUserStates(responseObj.data);
      } catch (err) {
        console.error("Authentication Error! err: ", err);
      }
    }
  } else {
    resetUserContext();
  }
}
authenticateUsingExistingToken();

setUserStates и resetUserContext делают только некоторые setStates, используя React Hooks. Единственное обещание для извлечения данных - это когда я использовал await.

. Буду признателен, если вы дадите мне несколько идей о том, почему выдается такая ошибка. Консоль сообщает, что ошибка произошла в последней строке функции, где } закрывает ее!

Вот полный стек ошибок:

./node_modules/jwt-decode/lib/index.js
C:/MY_FOLDER/client/node_modules/jwt-decode/lib/index.js:9
__webpack_require__
C:/MY_FOLDER/client/webpack/bootstrap:785
fn
C:/MY_FOLDER/client/webpack/bootstrap:150
Module../src/components/Auth/SignInUp/SignInUp.js
http://localhost:3000/static/js/main.chunk.js:374:68
__webpack_require__
C:/MY_FOLDER/client/webpack/bootstrap:785
fn
C:/MY_FOLDER/client/webpack/bootstrap:150
Module../src/containers/App/App.js
http://localhost:3000/static/js/main.chunk.js:2599:92
__webpack_require__
C:/MY_FOLDER/client/webpack/bootstrap:785
fn
C:/MY_FOLDER/client/webpack/bootstrap:150
Module../src/index.js
http://localhost:3000/static/js/main.chunk.js:3173:77
__webpack_require__
C:/MY_FOLDER/client/webpack/bootstrap:785
fn
C:/MY_FOLDER/client/webpack/bootstrap:150
1
http://localhost:3000/static/js/main.chunk.js:3328:18
__webpack_require__
C:/MY_FOLDER/client/webpack/bootstrap:785
checkDeferredModules
C:/MY_FOLDER/client/webpack/bootstrap:45
Array.webpackJsonpCallback [as push]
C:/MY_FOLDER/client/webpack/bootstrap:32
(anonymous function)
http://localhost:3000/static/js/main.chunk.js:1:67

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Нашел это! Ошибка была сгенерирована из jwtDecode. Так как функция определена как async, а выдача ошибки в jwtDecode не разрешает и не отклоняет обещание, возникла ошибка. Чтобы решить эту проблему, я окружил jwtDecode в try и поймал ошибку. В любом случае, спасибо за ваши ответы.

0 голосов
/ 14 января 2020

На основании неопределенности значения userToken и вашего местоположения ошибки (хотя оно должно основываться на стеке ошибок), исключение могло быть повышено с resetUserContext().

Если возможно, можете ли вы поделиться этой функцией? после, возможно, сокрытия любых конфиденциальных данных.

...