Как обновить вход в систему с помощью веб-SDK в React Native? - PullRequest
0 голосов
/ 08 сентября 2018

Я использую Firebase Web SDK (JS) в приложении ReactNative. Мой логин прост:

firebase.auth().signInWithEmailAndPassword(email, password)

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

Это плохой опыт для моих пользователей, поскольку они вынуждены снова войти в систему, когда вернутся на следующий день.

Как заставить Firebase SDK обновить токен входа в систему, даже если приложение имеет фоновый режим или возвращается на передний план?

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Это была полностью моя вина. У меня в методе рендеринга App.js была строка вроде:

// Should have been wrapped in an if
store.dispatch(FirebaseAuth.signOutCurrentUser());

// XXX TODO login as known user for testing, DO NOT USE IN PRODUCTION
const autoLogoutAndLoginAsTestAccount = false;
if (__DEV__ && autoLogoutAndLoginAsTestAccount) {
  store.dispatch(FirebaseAuth.signInWithEmailAndPassword({ email: "joel@test.com", password: "REDACTED" }));
}

который должен был быть

// XXX TODO login as known user for testing, DO NOT USE IN PRODUCTION
const autoLogoutAndLoginAsTestAccount = false;
if (__DEV__ && autoLogoutAndLoginAsTestAccount) {
  store.dispatch(FirebaseAuth.signOutCurrentUser());
  store.dispatch(FirebaseAuth.signInWithEmailAndPassword({ email: "joel@test.com", password: "REDACTED" }));
}

У меня это было на месте, поэтому мне не нужно было входить в систему каждый раз, когда я горячо перезагружал код RN, но, хотя я обернул автологин внутри if, чтобы предотвратить его запуск в prod / testflight, я не обернул автологин , Поэтому Firebase делал то, что я просил, и выходил из системы пользователя каждый раз, когда он перерисовывал приложение (например, при перезапуске).

Я использовал auth listener, но проблема не в этом.

Извините, это была глупая ошибка с моей стороны, и я чувствую смущение, так как обычно я очень осторожен с моим кодом, и я просто пропустил это. Я не хотел никому терять время и спасибо всем за ваши осторожные ответы. Я публикую это здесь на случай, если это кому-нибудь поможет в будущем.

0 голосов
/ 08 сентября 2018

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

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

firebase.auth().onAuthStateChanged(function (user) {
  if (user) {
    ... user is signed in
  }
  else {
    ... user is NOT signed in, show login screen
  }
})

Также ознакомьтесь с этой проверкой текущего состояния аутентификации в этом сообщении в блоге, где приведен пример использования вышеуказанного подхода в вашем коде React Native.

...