ОС: Окно 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
такой беспорядок. мой мозг остановился ...: (