Как обработать пользовательский срок действия токенов Firebase в Firebase 3.x.x

Я использовал "signInWithCustomToken ()"для аутентификации пользователя Firebase.

Срок действия этого токена истекает через 1 час.

Firebase рекомендовал истечение токена до 1 часа. Если мы изменяем срок действия при создании пользовательского токена с помощью библиотеки «php-jwt», firebase выдает исключение «Неверный формат пользовательского токена. Пожалуйста, проверьте документацию».

При поиске решений я нашел следующую ветку-Аутентификация Firebase Android не удалась: expired_token (срок действия аутентификационного токена истек)"

Но обновленный токен возвращаетсяonTokenRefresh ()"не работает для меня.

Какова будет процедура обновления этого пользовательского токена?

ИЛИ ЖЕ

Есть ли способ установить ручной срок действия для пользовательского токена?

Ответы на вопрос(2)

Существует ограничение с генерацией пользовательских токенов Firebase. Пользовательский токен Firebase ограничен до 1 часа (3600 секунд).

ехр Время истечения токена в секундах. Это может быть максимум на 3600 секунд позже, чем iat.

Если токен аутентификации истекает каждый час, нам трудно постоянно поддерживать действующий сеанс :(

Когда мы используем провайдеров аутентификации по умолчанию, таких как (Google, Facebook, Email ..); Firebase SDK по умолчанию позаботится об обновлении вашего токена авторизации. Но в пользовательской аутентификации Firebase SDK необходимо связаться со сторонним сервером для получения нового токена. Здесь только SDK не может обновить токен!

Мой обходной путь заключается в том, чтобы при каждом успешном извлечении токена сохранять информацию о «последнем получении токена» локально, чтобы мы могли обновить токен вручную через один час.

Вы можете обратиться к этой проблеме журнала для получения дополнительной информации,

https://github.com/firebase/quickstart-android/issues/31В API Firebase 9.0.0 как проверить, есть ли у пользователя действительный сеанс аутентификации или нет?

Обновить:

Google обновил свой документ,

exp (Время истечения): Время в секундах с начала эпохи UNIX, когда истекает токен. Это может быть максимум 3600 секунд позже, чем IAT. (Примечание: это контролирует только время истечения срока действия самого пользовательского токена. Но как только вы войдете в систему с помощью signInWithCustomToken (), они останутся вошедшими в устройство, пока их сеанс не будет признан недействительным или пользователь не выйдет.)

Какдокумент говорит, что пользовательский токен JWT действителен максимум 1 час; поэтому, прежде чем он истечет, аутентифицируйте своего пользователя с помощью Firebase. После этого сеанс останется активным; Это не истекает!

Вы можете использовать метод ниже, чтобы убедиться, что пользователь имеет действительный сеанс,

public static boolean hasValidAuthToken() {
    return FirebaseAuth.getInstance().getCurrentUser() != null ? true : false;
}

Надеюсь, это поможет вам!

 Karthi R18 янв. 2017 г., 12:32
@ Мухаммад Хассан, я верю; да, вы можете пойти с пользовательским токеном. После успешной аутентификации с помощью Firebase SDK позаботится о поддержании вашего сеанса.
 Karthi R23 янв. 2017 г., 08:49
@MuhammadHassan; Надеюсь, что это будет то же самое для веб
 Karthi R14 июл. 2016 г., 09:36
Вы можете создать конечную точку на стороне сервера, чтобы выдавать «пользовательский токен авторизации» для каждого запроса клиента. Для получения дополнительной информации, вы можете обратиться к этому документуКак создать собственный токен на вашем сервере
 Muhammad Hassan Nasr19 янв. 2017 г., 19:09
То же самое происходит с веб-SDK?
 Karthi R28 сент. 2016 г., 15:37
@MuhammadHassan вы можете отослатьофициальный документ, "Пользовательские требования токена"> "exp"
 Varsha P14 июл. 2016 г., 08:58
До этого, чтобы попробовать это решение, как обновить или проверить токен на стороне сервера?Я использовал библиотеку php-jwt.
 Muhammad Hassan Nasr18 янв. 2017 г., 09:12
@KarthiR Спасибо за совет. На самом деле я хочу сделать аутентификацию, например, WhatsApp, который проверяет телефонный номер пользователя один раз и поддерживает его в течение не менее одного года (независимо от того, закрыто ли приложение, в фоновом режиме, ...). Можем ли мы сделать это с помощью токена Firebase?
 Karthi R30 сент. 2016 г., 02:58
@MuhammadHassan, Вы можете использовать вышеупомянутый hasValidAuthToken (), чтобы убедиться, что у пользователя есть действительный сеанс.
 Muhammad Hassan Nasr29 сент. 2016 г., 20:14
@KarthiR, спасибо за ссылку, сказано, что «они останутся вошедшими в устройство, пока их сеанс не будет признан недействительным», когда сеанс может быть признан недействительным?
 Varsha P14 июл. 2016 г., 08:51
Да, определенно это помогло. Но обновление токена вручную через каждые 1 час может оказаться неоправданным решением. (Вызов сервера через каждые 1 час может ухудшить производительность приложения.) Надеюсь, что Firebase может дать ему альтернативу в ближайшее время.
 Muhammad Hassan Nasr28 сент. 2016 г., 14:39
Вы уверены, что «аутентифицируете своего пользователя с помощью Firebase. После этого сеанс останется активным; срок его действия не истечет!» У вас есть официальная документация для этого?

используя этот код

FirebaseInstanceId.getInstance().getToken();

FirebaseInstanceId мое имя класса изменить его в соответствии с вами.

 Varsha P13 июл. 2016 г., 14:45
Я пробовал решение, данное в "stackoverflow.com/questions/37505119/...". Но у меня не получилось.
 Chintan Soni13 июл. 2016 г., 14:22
действительно, это решение, которое Варша может искать?
 Frank van Puffelen20 июл. 2016 г., 01:35
@ChintanSoni с учетом упоминанияonTokenRefresh() в вопросе, имея ответ сFirebaseInstanceId не совсем неожиданно. Оба являются концепциями из Firebase Cloud Messaging. Что это имеет отношение к Аутентификации Firebase - хороший вопрос, но на этот вопрос OP должен ответить, предоставивMCVE.

Ваш ответ на вопрос