@aleps

Как правильно на фронтенде хранить авторизованного пользователя?

День добрый!
Вопрос по пониманию, мучаюсь с логикой как правильно,
и как правильно делают другие :)

У меня есть сервер на node.js который формирует токен JWT и в куки с флагом httpOnly передаёт его на фронтенд (у меня vue).
например, так:
res.cookie('AuthToken', authToken, { httpOnly: true, secure: true })

соответственно на VUE из js доступа к токену "AuthToken" нет.

На бэкенд токен принимается так (так как передать в axios запросе в headers его уже нельзя(или я не знаю как?):
req.cookies['AuthToken']
На этом этапе всё работает.

суть:
токен создал, обмениваюсь им с фронтенд и бэкендом,
но где и как хранить сами данные пользователя(логин, какая-то инфа о пользователе)?
т.е. тело JWT на vue я разобрать не могу,
приходит мысль отдельно передавать ещу одну куку"AuthToken_2"
с бекэенда типа так
res.cookie('AuthToken_2', JSON.stringify(user), { httpOnly: false})

и на фронте уже с нее брать логин и инфу.

Сейчас на middleware на node.js я в каждом запросе отсылает AuthToken и AuthToken_2 в куки.
Т.е. при каждом обращении серверу этот токен обновляется в куках (мысль чтобы всегда проверять его на актуальность(ну типа, а вдруг забанен?)).

не могу разобраться, как во VUE (у меня SPA) забирать каждый раз актуальный AuthToken_2 ?

P.S. я думал подключить vuex и типок акто так:
в header.vue:
computed: {
    reversedMessage: function () {
      return  this.$store.state.count
    } 
},


а во VUE router типо так:
router.beforeEach( async (to, from, next) => {
  store.getters.doneTodos
  next()
})


vuex такой
getters: {
    doneTodos (state) {
      return state.count = Cookies.get('AuthToken_2')
    }
 }

как я понимаю getters инициирует обновление значение <со>count

и все якобы работает, только с "запозданием на страницу". то есть, сами куки то приходят не мгновенно, и в момент перехода по роуту он берет еще старое значение.
p.s. я, конечно, не уверен что это AuthToken_2 (логин, какая-то инфа о пользователе) будет меняться часто, но тем не менее.

хочу проконсультироваться, возможно мой подход вообще ужас :(

Громаднейшее спасибо тому, кто поймет меня разжует логику того как нужно
  • Вопрос задан
  • 1041 просмотр
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Логично что при присылке токена можно добавить ещё джисон в котором будут пользовательские Настройки, сохраняете их в стор и дальше берёте из них. Либо после получения токена делаете редирект на пользовательский профиль там получаете информацию и сохраняете, и по желанию делаете редирект на ту страницу с которой был логин.
Ответ написан
delphinpro
@delphinpro
frontend developer
отдельный роут на получение пользователя.
т.е. аутентификация, потом запрос данных. данные в localStorage. не забываем, что этим данным впоследствии особо доверять нельзя, и при операциях нужно проверять их валидность на бэке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы