4

私の反応ネイティブアプリでは、サーバーへのすべてのフェッチリクエストの前に、以下のユースケースを実行する必要があることを確認する必要があります

-> 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 => {
                }
            )
            ;
    }
}

トークンの有効期限が切れた場合に呼び出す関数はisTokenExpiredrefreshTokenauthServices.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;
        })
}

そして、fetchForUFSauthServices.jsの私の関数は、トークンチェック(リフレッシュ)の完了後にサーバーを呼び出します。

function fetchForUFS(url,requestOptions){

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

redux-thunkredux-promiseおよびドキュメントを大量に読みましたが、middlewareミドルウェアロジックを本当に実装しているかどうかまだわかりませんか?

4

0 に答える 0