response-native - проверяет срок действия jwt с промежуточным программным обеспечением redux-thunk перед каждым вызовом API - PullRequest
0 голосов
/ 29 июня 2018

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

-> проверить дату истечения срока действия токена, который сохраняется в redux.

-> Если токен не просрочен, приложение продолжает работать с запрошенным fetch на сервер

-> Если срок действия токена истек, приложение немедленно отправляет новый запрос на refresh token, не давая пользователю знать об этом. После успешного обновления токена приложение продолжает работу с запрошенным fetch на сервер

Я пытался реализовать промежуточное ПО с redux-thunk, но я не знаю, хороший это дизайн или нет. Мне просто нужен кто-то, имеющий опыт работы с redux и react, чтобы дать мне обратную связь по поводу кода промежуточного программного обеспечения.

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

url = "https://———————";
requestOptions = {
    method: 'GET',
    headers: {
        'Authorization': 'Bearer ' + this.props.token
    }
};

dispatch(authActions.checkTokenAndFetch(url, requestOptions))
    .then((data) => {

    })

вот создатель действия - checkTokenAndFetch находится в authActions.js где мой actions находится

function checkTokenAndFetch(url, requestOptions){

        return dispatch => {

        if(authServices.isTokenExpired()){
            console.log("TOKEN EXPIRED");
            authServices.refreshToken()
                .then(
                    refreshToken => {
                        var arr = refreshToken.split('.');
                        decodedToken = base64.decode(arr[1]);
                        newTokenExpDate = JSON.parse(decodedToken).exp;
                        dispatch(writeTokenToRedux(refreshToken,newTokenExpDate));
                    },
                    error => {
                        Alert.alert("TOKEN refresh failed","Login Again");
                        Actions.login();

                    }
                );
        }
        else{
            console.log("TOKEN IS FRESH");
        }

        return authServices.fetchForUFS(url, requestOptions)
            .then(
                response => {
                    return response;
                },
                error => {
                }
            )
            ;
    }
}

Вот функции isTokenExpired и refreshToken, которые я вызываю в случае истечения срока действия токена, расположенные в другом файле с именем authServices.js.

function isTokenExpired(){
    var newState = store.getState();
    var milliseconds = (new Date).getTime();


    var exDate = newState.tokenExpDate;
    return milliseconds>exDate*1000
}


function refreshToken(){
    var refreshToken = store.getState();

    return fetch('https://—————————', {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Authorization': 'Bearer ' + refreshToken.token
        }
    })
        .then((response) => {
            return response._bodyText;
        })
        .catch((error) => {
        return error;
        })
}

и моя fetchForUFS функция в authServices.js для вызова сервера после завершения проверки токена (обновления).

function fetchForUFS(url,requestOptions){

    return fetch(url, requestOptions)
        .then((response) => {
            return response.json();
        })
        .then((responseData) =>{
        return responseData;
    })
        .catch((error) => {
        })
}

Я прочитал тонны redux-thunk, redux-promise и middleware документации и пока не уверен, действительно ли я реализую логику промежуточного программного обеспечения?

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