OCTAGRAM
@OCTAGRAM

Как воспользоваться устойчивой (persistent) авторизацией Firebase?

Вычитал про Firebase Auth, что там не каждый раз заново можно signInWithEmailAndPassword вызывать, а можно сохранить прошлую сессию и не плодить новые каждый раз. Причём, это поведение (LOCAL) вроде бы как по умолчанию. Но вот я медитирую на документацию и просто не могу понять, а как сделать-то.

С чего начинается выполнение?

firebase.initializeApp (Config);

Это синхронная функция, в сеть она не ходит.

А следующим обращением к Firebase уже пошла авторизация:

await firebase.auth ().signInWithEmailAndPassword
  (User_Mail, User_Password);


К этому моменту уже поздно. Если я хочу устойчивую авторизацию, мне нужно впилить что-то в этот промежуток.

Штука типа
firebase.auth ().currentUser
это синхронно получаемое свойство, сразу после initializeApp () она не может знать, залогинен ли пользователь. Я подумал, надо как-то пнуть её, чем-нибудь асинхронным. По смыслу подошло
await firebase.auth ().currentUser.reload ();
Не сработало. Узнал, что currentUser имеет значение null. Как же это починить? Может быть, так?
await firebase.auth ().updateCurrentUser (null);
FirebaseError
A null user object was provided as the argument for an operation which requires a non-null user object.

Да с какой стати такое требование? В документации написано английским по белому
updateCurrentUser ( user : User | null ) : Promise < void >

firebase.auth.User у меня нет, откуда я его возьму. А null у меня есть, и написано, что так можно. А выходит, нельзя.

Чего б ещё такого асинхронного вызвать? О, нашёл.
setPersistence ( persistence : Persistence ) : Promise < void >


Значением по умолчанию у Persistence считается LOCAL, то, что мне и нужно. Но вдруг, если я пну с тем же значением, у Firebase случится прозрение, и он наконец вспомнит, кого он залогинил в закрытой вкладке. Итак, пошли пинать
await firebase.auth ().setPersistence
  (firebase.auth.Auth.Persistence.LOCAL);


Как несложно догадаться, currentUser null. Хм, может оно только со второго раза сработает? Нет, опять null.

Вот ещё документация, специально про Firebase Persistence. Якобы про.

И что мы там видим в примере? Делается вызов setPersistence, а потом signInWithEmailAndPassword.

Аллё? Здесь вообще кто-нибудь понимает, что signInWithEmailAndPassword — это именно то, чего я НЕ ХОЧУ делать. НЕ ХОЧУ требовать пароль каждый раз. НЕ ХОЧУ сохранять пароль в localStorage, чтоб было, что передать аргументом signInWithEmailAndPassword. Покажите мне пример, как НЕ ВЫЗЫВАТЬ signInWithEmailAndPassword.

Какое-то издевательство.
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы