programing

리액션/리듀렉스 및 스웨거 클라이언트

prostudy 2022. 3. 30. 00:09
반응형

리액션/리듀렉스 및 스웨거 클라이언트

나는 주로 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

반응형