Я реализую форму входа, используя 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
, но здесь складывается структура магазина, и в приложении нет способа ее изменить.
Есть идеи, как это реализовать?