Как проверить токен ID пользователя в firestore с помощью Javascript? - PullRequest
0 голосов
/ 14 июля 2020

Я создаю собственное приложение для реагирования и использую Firebase, а точнее firestore, для управления своими данными. Моя текущая цель - реализовать функцию автоматического входа в мое приложение, где, если пользователь выходит из приложения, я хочу, чтобы он оставался в системе, если только они вручную не нажмут кнопку Sign Out перед выходом из приложения. Вот мой текущий процесс:

Когда пользователь входит в приложение, я вхожу в систему с помощью: firebase.auth().signInWithEmailAndPassword(email, password). Затем я получаю их idToken по:

  let authIdToken = "";
  firebase
    .auth()
    .currentUser.getIdToken(true)
    .then(function (idToken) {
      authIdToken = idToken
    })
    .catch(function (error) {
      console.log(error)
    });

Затем я хочу сохранить этот токен в телефоне, поэтому, когда пользователь снова откроет приложение, я могу получить этот токен и проверить его действительность. Если он действителен, я могу зарегистрировать пользователя, используя его idToken. В собственном ответе я могу сделать это, выполнив:

AsyncStorage.setItem(
    "userData",
    JSON.stringify({
      token: token,
    })
  );

Теперь, когда приложение загружается:

const startScreen = props => {
   useEffect(() => {
    const tryLogin = async () => {
     const userData = await AsyncStorage.getItem("userData");
     const transformedData = JSON.parse(userData);
     const { token } = transformedData;

     await firebase
       .auth()
       .verifyIdToken(token, true)
       .then((payload) => {
         console.log(true)
       })
       .catch((error) => {
         if (error.code == "auth/id-token-revoked") {
           // Token has been revoked. Inform the user to reauthenticate or signOut() the user.
           console.log("revoked")
         } else {
           console.log("error")
         }
       });
    };
    tryLogin();
 }, []);

Проблема: Когда я пытаюсь проверить Таким образом, я столкнулся со следующей ошибкой: firebase.auth().verifyIdToken is not a function. Я прочитал документацию и не знаю, как еще проверить этот токен с помощью JS. Как мне это проверить? Сообщите мне, если мой процесс проверки неверен и как это нужно сделать. Я новичок в использовании firestore и аутентификации в целом и надеюсь узнать, как это сделать правильно.

Еще одно полезное замечание: вот как я настраиваю свой firestore: !firebase.apps.length ? firebase.initializeApp(firebaseConfig) : {};

Спасибо!

1 Ответ

1 голос
/ 14 июля 2020

Затем я хочу сохранить этот токен в телефоне, чтобы, когда пользователь снова откроет приложение, я могу получить этот токен и проверить его действительность.

Это совершенно не нужно. Firebase Auth с сохранением авторизованного пользователя и автоматическим обновлением sh токена без каких-либо действий. Все, что вам нужно сделать, это услышать, когда станут доступны обновления для токена, и при необходимости действовать с новым токеном. Вы можете установить sh прослушиватель токена идентификатора, используя onIdTokenChanged , как показано в связанной документации API:

firebase.auth().onIdTokenChanged(function(user) {
  if (user) {
    // User is signed in or token was refreshed.
  }
});

Получив этот токен, вы знаете, что пользователь успешно вошел в систему. Больше нечего делать. Нет необходимости использовать его для входа.

Кроме того, вы не можете проверить токен на веб-интерфейсе. Метод verifyIdToken, на который вы смотрите, предназначен только для Admin SDK, который работает только на бэкэнде. Идея состоит в том, что вы получаете токен на внешнем интерфейсе, а затем передаете его на сервер, как описано в документации для Admin SDK . Бэкэнд использует это, чтобы надежно определить, является ли пользователь во внешнем интерфейсе тем, кем они себя называют.

Поскольку вы не сказали, есть ли у вас бэкэнд или нет, работа с этим токеном может быть необходимо вообще. Если вы просто хотите знать, когда пользователь вошел в систему (даже если они просто возвращаются на страницу после того, как ушли, то вы можете пропустить все, что указано выше, и просто использовать наблюдатель состояния авторизации . Опять же, Firebase Auth сохраняет информацию о пользователе, поэтому вам не нужно снова регистрировать его. Наблюдатель сообщит вам, когда автоматический c вход будет завершен, или если они не вошли в систему вообще. .

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