Я использовал анонимную аутентификацию Firebase для приложения React Native, в первую очередь для того, чтобы пользователи могли только читать / записывать свои собственные данные (например, проверка auth && auth.uid
в правилах безопасности)
Раньше с Firebase 2.4.2 моя схема аутентификации была следующей:
пользователь подписывается
firebaseRef.authAnonymously((error, authData) => { if (error) { // handle error } else { // store the token on device store(authData.token); } });
всякий раз, когда пользователь открывает приложение позже, создайте сеанс с сохраненным токеном
firebaseRef.authWithCustomToken(storedToken, (error) => { if (error) { // handle errors } else { // proceed } });
Похоже, что токен, возвращаемый анонимной аутентификацией в Firebase 2.4.2, будет работать для пользовательской аутентификации.
После обновления до Firebase 3.1 этот поток больше не работает - в частности, попытка создать signInWithCustomToken
сеанс с токеном, сгенерированным signInAnonymously
, возвращает ошибку auth/invalid-custom-token
.
Однако проблема отсутствия постоянного сеанса, похоже, исчезла. Теперь с Firebase 3.1:
пользователь подписывается
firebase.auth().signInAnonymously().then(user => { // store token user.getToken().then(token => store(token)) });
всякий раз, когда пользователь открывает приложение позже, сеанс все еще доступен, и этот слушатель вызывается
firebase.auth().onAuthStateChanged(user => { // user is still authenticated });
Мне непонятно, как это работает, как Firebase сохраняет сеанс?