Лучший способ сохранить вход в firebase с помощью expo go

Я пытаюсь создать приложение в React Native, используя Экспо Го., успешно заработал вход в Google, и все в порядке. К сожалению, логин пользователя НЕ сохраняется между перезапусками приложения. Сначала я подумал, что это проблема с асинхронным хранилищем, но я могу отлично сохранять элементы в хранилище между перезапусками.

Какие данные мне нужно сохранить вручную, чтобы иметь возможность снова входить в систему всякий раз, когда приложение запускается?

Я бы предпочел сохранить данные вручную, так как все методы, которые работают предполагаемый, у меня не работают. Методы, которые я пробовал:

  • Вызов setPersistence(getAuth(), browserLocalPersistence) выдает ошибку, см. пост это, чтобы узнать точную ошибку, которую я получаю.
  • Использование onAuthStateChanged также не работает для меня, на самом деле, это основной способ, которым я знаю, когда войти в систему. Пользовательский объект всегда имеет значение null и никогда не меняется с нуля до тех пор, пока пользователь снова не войдет в систему (что происходит при каждом запуске приложения). ).
    useEffect(() => getAuth().onAuthStateChanged(value => {
      if (value) {
        console.info("User is signed in");
      }  else {
        console.info("User is signed out");
        // navigation.navigate("login")
      }
    }), [])
    

(Этот код всегда будет печатать, что пользователь вышел из системы при перезапуске приложения.)
На данный момент я думаю, что было бы проще, если бы я мог сам сохранить учетные данные пользователя, а затем автоматически входить в них при запуске приложения. Мне трудно найти код для этого.

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

Bernard Allotey 20.03.2022 23:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно использовать SecureStore для сохранения данных на устройстве. Что-то вроде LocalStorage в Интернете, SharedPreference в Android и NSUserDefaults в iOS.

Пример:

// save your thing
async function save(key, value) {
  await SecureStore.setItemAsync(key, value); 
}

// get your thing
async function getValueFor(key) {
  let result = await SecureStore.getItemAsync(key);
  if (result) {
    alert("? Here's your value ? \n" + result);
  } else {
    alert('No values stored under that key.');
  }
}

Подробнее здесь: https://docs.expo.dev/versions/latest/sdk/securestore/

идея состоит в том, чтобы сохранить JWT из Firebase в SecureStore, поэтому при запуске приложения проверьте это значение, а затем используйте этот JWT в безопасном хранилище при вызове вашего API.

Я ценю эту попытку ответа, но я знаю, как сохранить строки в хранилище. Я специально спрашиваю о том, как сохранить вход в firebase при запуске приложения.

Bernard Allotey 21.03.2022 02:32

@BernardAllotey идея состоит в том, чтобы сохранить JWT из Firebase в SecureStore, поэтому при запуске приложения проверьте это значение, а затем используйте этот JWT в безопасном хранилище при вызове вашего API.

ken 21.03.2022 08:13

@ken Как нам справиться с истечением срока действия JWT? Есть ли способ легко обновить JWT по истечении срока его действия?

Mayankmmmx 22.03.2022 07:40
Ответ принят как подходящий

Итак, я понял, что для сохранения состояния входа в систему вам действительно нужно выполнить специальный процесс, если вы используете expo. Вам нужно инициализировать свою собственную авторизацию, передав асинхронное хранилище, например

import { initializeApp } from "firebase/app"
import { initializeAuth } from "firebase/auth"
import { getReactNativePersistence } from "firebase/auth/react-native"
import AsyncStorage from "@react-native-async-storage/async-storage"

const defaultApp = initializeApp(config);
initializeAuth(defaultApp, {
  persistence: getReactNativePersistence(AsyncStorage)
});

Есть идеи, как это должно выглядеть с SDK firebase 9 (с использованием совместимости)?

Irfy 03.04.2022 10:26

Другие вопросы по теме