Впринцыпе вы все правильно делаете. Насчет рефреша, лучше всего проверять авторизован ли юзер на сервере для этого вместо localstorage, лучше использовать куки, так как к ним есть доступ с сервера. Проверяем если есть кука token и она валидна рендерим сайт с так называемым initialState, к примеру:
window.initialState = {
user: {
id: 1,
avatar: '',
....
}
}
на клиенте при рендере приложения проверяем есть ли юзер в initialState и если есть то автоматом его авторизовываем.
НО не всегда есть доступ к серверу, по этому можно сделать все тоже на фронте, тоесть НЕ рендерить ничего пока не проверите авторизован ли юзер или нет.