Как сохранить одновременно localStorage и sessionStorage, используя redux-persist? - PullRequest
0 голосов
/ 12 мая 2019

Я реализую форму входа, используя react, redux и redux-persist. API входа готов от фоновой команды. Форма имеет флажок «запомнить меня», и я хочу сохранить токен аутентификации JWT в ответе при входе в систему.

То, что я считаю правильным способом реализации «запомни меня», таково:

  • Если флажок «запомнить меня» не установлен, токен должен быть сохранен в sessionStorage. Так что, когда браузер закрыт, пользователь должен снова войти в систему, но ему не нужно входить на вкладку переключения или обновлять текущую страницу.
  • Если этот флажок установлен, токен должен быть сохранен до localStorage. Пользователь все еще вошел в систему, даже если браузер закрыт.

Теперь я знаю, что с нашей внутренней стороны существует только время истечения токена.

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

Если это так, как я могу обновить свою постоянную конфигурацию на основе флажка «запомнить меня»?

Мой текущий store.js это:

import { createStore } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage'; 
import rootReducer from './reducers';

const persistConfig = {
  key: 'root',
  storage,
  whitelist: ['auth'],
};

const persistedReducer = persistReducer(persistConfig, rootReducer);

const store = createStore(persistedReducer);

const persistor = persistStore(store);

export {
  store, persistor
};

И это используется здесь:

import React from 'react';
import ReactDOM from 'react-dom';
import App from 'js/containers/App';
import { store, persistor } from './store';

const render = Component => {
  ReactDOM.render(
    <Component store={store} persistor={persistor}/>,
    document.getElementById('root')
  )
};

render(App);

if (module.hot) {
  module.hot.accept('js/containers/App', () => {
    const NextApp = require('js/containers/App').default;
    render(NextApp);
  });
}

Я хочу изменить persistConfig в зависимости от формы входа в систему и использовать sessionStorage вместо localStorage, но здесь складывается структура магазина, и в приложении нет способа ее изменить.

Есть идеи, как это реализовать?

...