Как я могу поймать ошибку аутентификации firebase с помощью администратора firebase

# #node.js #typescript #firebase #google-cloud-functions #firebase-admin

Вопрос:

У меня есть следующая попытка поймать

 try {
  user = await admin.auth().getUserByEmail(inputEmail);
} catch (error) {
  if(error.code !== "auth/user-not-found") throw new Error("authentication failed");
}
 

Но я получаю сообщение об ошибке, говорящее

 Object is of type 'unknown'.
 

Об ошибке.код

Этот код и раньше работал отлично. Как это можно решить?

Я нашел это

https://firebase.google.com/docs/reference/js/v8/firebase.Ошибка в базе данных

но я не знаю, откуда я могу его импортировать.

введите описание изображения здесь

Я попытался указать любой тип as введите описание изображения здесь

И я попытался проверить, была ли ошибка экземпляром ошибки, в которой говорится

 Property 'code' does not exist on type 'Error'.
 

введите описание изображения здесь

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

1. Откуда у вас эта ошибка? Можете ли вы поделиться скриншотом с трассировкой стека? Также вы просматриваете документы Firebase JS SDKs. Нажмите здесь , чтобы просмотреть ошибки аутентификации администратора Firebase.

2. Это всплывающее окно с ошибкой vscode. Я действительно видел эти ошибки и пытаюсь их проверить. Но ошибка неизвестного типа и, следовательно, не имеет свойства кода

Ответ №1:

Ошибка просто говорит, что тип error неизвестен.

 try {
  // ...
} catch (error: unknown) {
  // unknown --> ^^^
}
 

Если вы используете Typescript 4.4 , то вы можете использовать флаг useUnknownInCatchVariables, который изменяет тип переменных предложения catch по умолчанию с any на unknown .

Затем вы настраиваете пользовательские охранники типов, чтобы указать тип для создаваемой ошибки. Вы можете импортировать FirebaseError из @firebase/util как в этом выпуске.

 import { FirebaseError } from '@firebase/util';

try {
  // ...
} catch (error: unknown) {
  if (error instanceof FirebaseError) {
     console.error(error.code)
  }
}
 

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

1. Я попробовал это, но во время развертывания возникнет ошибка, в которой говорится Catch clause variable cannot have a type annotation.

2. Импорт был тем, что я искал! Спасибо

Ответ №2:

Можете ли вы попробовать это с помощью этого:

 try {
  user = await admin.auth().getUserByEmail(inputEmail);
} catch (error:unknown) {
  
  if (error instanceof Error) {
      if(error.code !== "auth/user-not-found") throw new Error("authentication failed");
  
  }
}

 

Пожалуйста, проверьте эту документацию об этом.

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

1. Похоже, это не работает, я получаю ту же ошибку. Я добавил скриншот.