Как обновить Firebase IdToken с клиентом Apollo Reactjs - PullRequest
3 голосов
/ 13 апреля 2019

Я использую клиент Apollo в ReactJS для взаимодействия с GraphQL API.Мы используем проверку подлинности Firebase, и это JWT, чтобы гарантировать, что наш API не предоставляет общедоступные личные данные, но проблема в том, что токен firebase истекает примерно раз в час.

В настоящее время я сохраняю локальное хранилище IdToken, когда пользователь входит в систему ииспользуйте это в заголовках запросов, но когда срок действия токена истечет, graphql вернет ошибку Non Authorized.Я также пытался использовать customfetch для функции createHttpLink из apollo

const customFetch = async (uri, options) => {
    console.log(firebase.auth.currentUser)
    if (firebase.auth.currentUser) {
        const token = await firebase.auth.currentUser.getIdToken()
        localStorage.setItem('token', token)
        options.headers.authorization = token;
        return fetch(uri, options);
    }
    else {
        firebase.auth.onAuthStateChanged(async (user) => {
            if (user) {
                console.log('Inside on Auth')
                const token = await user.getIdToken()
                localStorage.setItem('token', token)
                options.headers.authorization = token;
                return fetch(uri, options);
            }
        })
    }
    console.log('End of Fetch')
};

, но выборка завершается до завершения firebase.auth.onAuthStateChanged, поэтому она также не работает

...