# #reactjs #rest #session #firebase-authentication
Вопрос:
Я разрабатываю веб-приложение, используя React для интерфейса и Django для бэкенда. Пользовательский интерфейс полностью обрабатывается React и использует API-интерфейс Django REST.
Я выбрал firebase в качестве поставщика аутентификации и реализовал его следующим образом:
- сервер (Django) подключается к firebase и предоставляет конечные точки аутентификации для реагирования.
- например, Django’s
/api/login
отправляет запрос POST в Firebase Auth REST API и пересылает ответ (или его части) на интерфейс
- например, Django’s
- разрешение основано на JWT
tokenID
, предоставленном firebase
Все работает, как ожидалось , но срок действия firebase tokenID
истекает через один час, и его необходимо обновить с помощью refreshToken
действия, для которого требуется POST
запрос на серверы firebase. Я сохраняю оба этих токена на интерфейсе, но я не могу придумать способ убедиться, что tokenID
они действительны перед каждым запросом на сервер. Я также сохраняю время unix, когда токен будет отозван.
Поскольку мне не нужен код firebase на стороне клиента, я вижу несколько вариантов:
- используйте
setTimeout()
. При входе в систему установите таймер на один час, а при перезагрузке страницы установите его на разницу между временем истечения срока действия токена иnew Date()
.- было бы это неэффективно? чтобы иметь ожидающий таймер в фоновом режиме?
- проверяйте и обновляйте, если это необходимо, перед каждым вызовом api.
async function fetchSomething(tokenID: string) { tokenID = await refreshIfNecessary(tokenID); fetch("api/endpoint", { method: "POST", headers: { Authorization: tokenID } }.then(r => {...}) }
- Но это был бы какой-то уродливый код, который мне нужно было бы повторять
tokenID = await refreshIfNecessary(tokenID);
в каждой функции api
- Но это был бы какой-то уродливый код, который мне нужно было бы повторять
- не пытайтесь обновить токен на интерфейсе, но когда API получит идентификатор токена с истекшим сроком действия, обновите его и отправьте запрошенные данные с новым токеном
- это добавляет много сложностей как в пользовательском интерфейсе, так и на сервере