Аутентификация в Firebase с помощью localId / idToken (вместо адреса электронной почты / пароля) - PullRequest
0 голосов
/ 11 ноября 2018

В моем приложении, когда пользователь входит в систему, я использую firebase.auth для аутентификации пользователя на основе адреса электронной почты / пароля, введенного пользователем:

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

Затем я отправляю его в состояние избыточности, а также устанавливаю полученные localId и idToken в локальном хранилище:

localStorage.setItem('token', response.user.qa);
localStorage.setItem('localId', response.user.uid);

Когда пользователь закрывает окно приложения, а затем снова открывает приложение, localId и idToken по-прежнему устанавливаются в локальном хранилище, но для повторной аутентификации мне нужно указать адрес электронной почты и пароль. Можно ли выполнить аутентификацию с помощью localId / idToken, или я должен сохранить электронную почту / пароль в localStorage вместо сохранения двух токенов?

После проверки подлинности пользователя:

var user = firebase.auth().currentUser;
console.log(user);

Я получаю «ноль». Кажется, что я должен войти, даже если у меня уже есть localId, без входа у меня нет доступа к базе данных.

Кроме того, очевидно, что мои правила базы данных предоставляют доступ к БД только аутентифицированным пользователям:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Заранее спасибо!

1 Ответ

0 голосов
/ 11 ноября 2018

Вам не нужно хранить электронную почту и пароль в местном хранилище. Библиотека Firebase автоматически сохраняет информацию аутентификации локально.

Причина, по которой вы получаете null, заключается в том, что вы пытаетесь получить информацию о пользователе с помощью синхронного кода. Это означает, что вы пытаетесь получить пользователя до инициализации библиотеки firebase.

firebase.auth().currentUser; // <= synchronous

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

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...