Вычитал про 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.
Какое-то издевательство.