리액션/리듀렉스 및 스웨거 클라이언트
나는 주로 swagger 클라이언트를 api 액세스에 사용하는 react/Redex 앱을 구성하는 가장 좋은 방법을 찾고 있다.
문제는 스웨거 클라이언트에 대한 참조를 어디에 저장해야 할지 잘 모른다는 것이다.로그인하여 JWT 인증 토큰을 획득한 후 인증 헤더를 추가하기 위한 모든 후속 요청을 알려야 한다.공리를 사용하는 경우 이것은 다른 지시를 받을 때까지 머리글을 유지하기 때문에 사소한 것이다.스웨거 클라이언트가 이런 짓을 하는 것 같지는 않다.따라서 로그인 시 스웨거 클라이언트를 한 번 만들고 헤더 정보를 추가한 후 향후의 모든 요청에 대해 참조하는 것이 이상적이다(그러므로 단일 페이지 응용프로그램에서 스키마 json을 한 번만 가져오면 된다).
내가 어떤 행동의 맥락에서 이 일을 하고 있으니, 스웨거 클라이언트를 Redex 스토어에 저장하는 것이 가장 좋을까(그리고 어떻게 하면 그렇게 할 수 있을까)?아니면 Redex 외부에 정적 인스턴스를 만들 것인가?
// app init
const createStoreWithMiddleware = applyMiddleware(promise)(createStore);
const store = createStoreWithMiddleware(reducers);
export const swaggerClient = { instance: authService.createFromState().then(() => {
ReactDOM.render(
<Provider store={store}></Provider>
...
);
});
일부 로그인 작업 수행, 스웨거 클라이언트 생성:
// redux action
import { swaggerClient } from '../index';
// ... do login, get bearerToken
Swagger({
url: 'https://localhost/swagger/v1/swagger.json',
requestInterceptor(req) {
req.headers['Authorization'] = `Bearer ${bearerToken}`;
return req;
}
}).then((client) => {
// store reference for all future ajax calls
swaggerClient.instance = client;
});
페이지가 새로 고쳐질 경우 베어러에서 스웨거 클라이언트를 다시 빌드해야 해로컬 저장소의 토큰
// authService
import { swaggerClient } from '../index';
function createFromState() {
// if authentication is known from localstorage, we can rebuild
// a swagger client
if(isAuthenticated()) {
const authentication = getAuthentication();
return Swagger({
url: 'https://localhost/swagger/v1/swagger.json',
requestInterceptor(req) {
req.headers['Authorization'] = `Bearer ${authentication.bearerToken}`;
return req;
}
}).then((client) => {
swaggerClient.instance = client;
return client;
});
}
}
이게 옳은 방향인지 좀 헷갈리네, 아마 새로운 질문일 거야.로컬 스토리지에서 복원하는 동안 스웨거 클라이언트가 로딩될 때까지 기다려야 하는 것은 (향후 호출 시 레이스 상태를 방지하기 위해) 다소 미친 방법인 것 같다.
참조URL: https://stackoverflow.com/questions/49625129/react-redux-and-swagger-client
'programing' 카테고리의 다른 글
v-select에서 항목 텍스트 사용자 지정 (0) | 2022.03.30 |
---|---|
Python에서 사전 키를 목록으로 반환하는 방법? (0) | 2022.03.30 |
하위 구성 요소(행)를 제거하는 예기치 않은 동작 (0) | 2022.03.30 |
Vue-Router를 구현하는 VueJS SPA에서 중첩된 $ref 구현 (0) | 2022.03.30 |
로그아웃 시 nuxt 스토어 및 모든 하위 모듈 지우기 (0) | 2022.03.30 |