Как получить Firebase idToken из AuthResult?

Firebase предоставляет AuthResult при обратном вызове для входа пользователя в систему с использованием startActivityForSignInWithProvider (в моем случае поставщик - Apple на платформе Android). Кажется, я не могу получить от него idToken правильным (синхронным) способом.

Пока что я нашел два варианта, оба не устраивают:

Вариант 1: кастинг

((OAuthCredential)authResult.getCredential()).getIdToken()

Это работает, но я не уверен, что это безопасный бросок. Plis, я думаю, если бы Firebase захотела, чтобы мы получили idToken таким образом, они бы добавили его в AuthCredential.

Вариант 2: получение от пользователя

authResult.getUser().getIdToken(false).addOnCompleteListener { ... }

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


person brkeyal    schedule 17.02.2020    source источник


Ответы (1)


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

person Doug Stevenson    schedule 17.02.2020
comment
Спасибо, думаю, это то, что я буду делать, пока не будет другого варианта, но я все же думаю, что имеет смысл получить его где-нибудь в AuthResult, так как это обновленное действие, которое только что было завершено - person brkeyal; 18.02.2020
comment
Это не обязательно тот случай, когда результат аутентификации требует нового токена идентификатора. Это разные события, поэтому они два разных слушателя. На самом деле они оба были в одном слушателе, но это было проблематично, поэтому они разделили их вот так. - person Doug Stevenson; 18.02.2020