Чеканить токены firebaseId необычайно медленно - PullRequest
0 голосов
/ 13 июня 2019

Для аутентифицированных вызовов API я генерирую токен firebaseId каждый раз, как показано в коде ниже. Но это иногда занимает до 2-3 секунд для чеканки токена, что в итоге приводит к медленному UX. Есть ли какие-либо обходные пути для этого, возможно, для хранения токена в течение более длительного периода или даже на неопределенный срок? Я что-то упускаю из виду?

Спасибо!

async fetchFromAPIAuthenticatedTimeout(url, params) {
    this.fetchStampA = (new Date()).getTime()
    try {
        const token = await firebase.auth().currentUser.getIdToken(true)
        this.fetchStampB = (new Date()).getTime()
        const response = await fetch(url,params)
        if (response.status != 200) {
            throw Error("api-error");
        }
        var json = null;
        try {
            json = await response.json();
        } catch (error) {
            throw Error("api-error")
        }
        this.fetchStampD = (new Date()).getTime()
        console.log(">> token",this.fetchStampB-this.fetchStampA)
        console.log(">> fetch",this.fetchStampC-this.fetchStampB)
        return json.result
    }
    catch (error)
    {
        throw Error(error.message)
    }
}

// Prints:
// >> token 2198
// >> fetch 319

1 Ответ

0 голосов
/ 13 июня 2019

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

ОБНОВЛЕНИЕ: этот крайний случай исправлен,Токены теперь обновляются незадолго до истечения срока их действия.Таким образом, никогда не требуется использовать принудительное обновление для этого варианта использования. Обратите внимание, что все еще может быть крайний случай, когда, если вы отправляете запрос за несколько секунд до истечения срока действия и существует задержка, сервер может не вызывать verifyIdToken () до истечения срока действия.Таким образом, вы можете реализовать логику повторных попыток или проверить время истечения (см. IdTokenResult # expirationTime ) и принудительно обновить, если оно очень близко к отметке времени.Но, конечно, не по каждому запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...