Автономному APIService необходим доступ к redux или NextJS ctx для получения токена - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть автономный APIService.js, который используется в моем приложении NextJS, он делает несколько вещей, но главное - установить BASE_URL и, если пользователь вошел в систему (должен иметь токен в cookie или вфайл cookie заголовка - он затем отправляется в приставку).

В принципе, я думаю, что мне нужен этот APIService;определить, есть ли на компьютере cookie (он есть) или серверная часть отрисована, и получить его из заголовка;или то, что я считаю лучше - это прослушать изменения в редуксе и взять токен из хранилища редуксов.

Это мой APIService здесь;

    import axios from 'axios';
    import { Cookies } from 'react-cookie';
    import { API_URL } from './constants';

    const config = {
      baseURL: API_URL,
    };
    const cookies = new Cookies();
    const APIService = axios.create(config);

    APIService.interceptors.request.use((request) => {
      const token = cookies.get('token');
      request.headers.Authorization = token ? `Bearer ${token}` : '';
      return request;
    });

    export default APIService;

, чтобы привести примериспользование страницы NextJS;

У меня есть эта функция в моем _app.js

  static async getInitialProps({ Component, ctx }) {
    if (ctx.isServer) {
      if (ctx.req.headers.cookie) {
        const token = getCookie('token', ctx.req);
        console.log('WHOAMI ', token);
        ctx.store.dispatch(reauthenticate(token));
      }
    } else {
      const { token } = ctx.store.getState().authentication;
      console.log('WHOAMI2 ', token);
      ctx.store.dispatch(reauthenticate(token));
    }

    return {
      pageProps: Component.getInitialProps
        ? await Component.getInitialProps(ctx)
        : {},
    };
  }

Нужно ли мне подключать () APIService к Redux - если да, то как я могу? Обычно я импортирую APIService в другие компоненты, где мне нужно использовать мой API, поэтому я не хочу вносить в него радикальные изменения, если это не является абсолютно необходимым.

1 Ответ

0 голосов
/ 08 ноября 2019

В нашем приложении мы сохранили службы, в частности Службу аутентификации, в отделении от Redux.

Я хотел бы предложить использовать его в getInitialProps вместо его подключения кРедукс напрямую. Вы можете по-прежнему использовать его в Redux без каких-либо проблем, так как вам нужен только доступ к файлам cookie, чтобы проверка входа работала. Это сделает работу и сделает вещи простыми.

...