Можно ли использовать оператор if в вызове REST API? - PullRequest
0 голосов
/ 12 марта 2020

ОС: Окно 10
ИНСТРУМЕНТЫ IDE: VS C
узел: v12.14.1

Привет, я не очень хорош в Engli sh. так что мои выражения будут немного неловкими.
Я использую Spring boot REST API и клиентская сторона реагирует. js

Я пытаюсь использовать refre sh Token, Access Token с jwt.

Что я хочу сделать, это:

Перед вызовом rest api. Если accessToken недопустим с тайм-аутом на стороне клиента,
получить Requesttoken в localStorage. и отправьте его на сервер, перезапустите accessToken и refreshToken.
И сохраните его снова. Затем я называю rest api, как я хочу, чтобы он назывался первым.

Вот мой вопрос.
Возможно ли, что Rest api имеет оператор if?

api. js

const getAccessToken = () => {
const accessToken = sessionStorage.getItem('accessToken');
if (!accessToken) {
    window.location.href = "http://localhost:3000";
    return alert('Login first');
} else if (accessToken && !validateToken()) {

// ~~~~ Here is what i want to ask~~~~
       is it possible in react.js???

    const refreshToken = localStorage.getItem("refreshToken");
    getAtWithRefreshToken(refreshToken); 
    sessionStorage.setItem('')
    return accessToken;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

} else if (accessToken && validateToken()) {
    console.log("token is Valid~~~");
    return accessToken;
}}


export const getBoardList = (searchType = '', searchString = '', page) =>
axios.get("http://localhost:8080/jpa/board/",
    {
        params: {
            searchType,
            searchString,
            page
        },
        headers: {
            'Authorization': getAccessToken()
        }

    }
)

Это мой первый вопрос в StackOverFlow ...
Пожалуйста, дайте мне знать в комментариях, если есть что-то, что мне нужно объяснить .

Извините за то, что много времени проводите в моем смешном вопросе.
Надеюсь, вы, ребята, всегда здоровы.


+ api. js
getAtwithRefreshToken

export const getAtWithRefreshToken = (refreshToken) =>
axios.post("http://localhost:8080/jpa/system/getat",
    {
        refreshToken
    }
)


и в модуле,

export default handleActions({
..(another pender)....
...pender({
    type: GET_AT, // getAtWithRefreshToken
    onPending: (state, action) => { 
        return state; // do something
    },
    onSuccess: (state, action) => { 
        const result = action.payload.data.data;
        sessionStorage.setItem('role', result.role);// role : [ROLE_ADMIN]
        sessionStorage.setItem('accessToken', result.accessToken);
        sessionStorage.setItem('memberId', result.memberId); // id : admin
        localStorage.setItem('refreshToken', result.refreshToken);
        return state
    },
    onFailure: (state, action) => { 
        alert(action);
        console.log(action);
        return state; // do something
    }
}),
..(another pender)....
, initialState);


а в контейнере я использую ужасные вещи вроде ....

getBoardList = async (searchType, searchString, page, size, direction) => {
    this.getAccessToken();
    const { boardActions } = this.props;
    try {
        this.getAccessToken(); 
        await boardActions.getBoardList(searchType, searchString, page, size);
    } catch (e) {
        console.log("error log :" + e);
    }
    this.getBoardCount(searchType, searchString);
}


и моя страница показывает

Unhandled Rejection (InvalidTokenError):
Invalid token specified: Cannot read property 'replace' of undefined

такой беспорядок. мой мозг остановился ...: (

...