Max
у нас на проекте SPA, я до этого приложения с авторизацией не делал, с токенами первый раз знаком, тут поэтому совет нужен)
Max
Серьезное?
выразился так для привлечения внимания)
Sergey
Получаешь на сервере токен, потом в хедер его
Max
в общем, я сделал входное окно, которое по дэфолту отправляет на регистрацию или авторизацию, после регистрации или авторизации приложение даёт доступ к интерфейсу (внутри флаг переключаю, после получения прав доступа), в приложении нужно проверять токен, который я в LocalStorage записываю, проверка идёт в каждом компоненте в худе created, возможно лучше эту проверку сделать в хуках роутинга, если токен протухает, то удаляю его и флаг автоматически переключается на редирект к форме входа/авторизации
Max
кто как делал?
Max
поделитесь опытом
akasybe
точно не в компонентах
Max
точно не в компонентах
в хуках роутинга?
akasybe
хук роутинга - самое нормальное место
Max
такой момент, если рефрешу страницу, то срабатывает дэфолтный редирект на страницу авторизации, туплю и не могу врубить как оставлять пользователя на странице роута, где он сделал рефреш, если токен не протух
heavycharged
https://github.com/auth0-blog/vue-jwt-authentication/tree/master/src
heavycharged
я вот так делал, тут все есть, и goto после авторизации прочее.
Max
Спасибо)
Sergey
В проекте с jwt перед монтированием Vue вызываются проверки...
Max
я после авторизации пушу в роутинг страницу стартового отображения самого приложения, если права доступа получены
Sergey
До вызова экземпляра
akasybe
у вью дока вообще отличная
Max
а взять пример, у меня 3 роута: about, prices, contakts, вход в приложение на страницу about, но на странице prices я сделал рефреш страницы и меня перекидывает на страницу входа в приложение - about, как сохранить стэйт в роутинге, чтоб остаться в том же месте после рефреша?)
akasybe
там почти все распространенные кейсы расписаны
akasybe
вот, у Vuex есть initial state
akasybe
ты в него должен поместить свой токен из локал сторэджа, если я правильно думаю
akasybe
точнее даже не токен, а флаг authenticated
akasybe
под рефрешем ты понимаешь ctrl+R?
Max
флаг при рефреше сбрасывается
Sergey
флаг при рефреше сбрасывается
Поэтому мы перед вызовом экземпляра диспатчим
akasybe
так при рефреше страницы у тебя весь javascript запускается снова, и у тебя происходит инициализация vue приложения, инициализируется store
Max
я флаг меняю при авторизации/регистрации, чтоб получить доступ к приложению, а потом ещё делаю запрос за данными юзера, отправляя токен по API
Max
Поэтому мы перед вызовом экземпляра диспатчим
получается в хуках компонента нужно диспачить?
akasybe
ты немного запутался)
Max
ты немного запутался)
вот и прошу подсказа)
Max
можно я опишу логику, а потом вы меня поправите?)
Sergey
точнее даже не токен, а флаг authenticated
Сделай флаг в самом начале такой
Max
описываю логику, а потом скорректируйте меня)
Sergey
Получил правду и продолжаешь запрашивать данные, если просто
Max
1) при входе в приложение идёт проверка токена в LocalStorage, если там есть токен, то отправляю его бэку по урлу, а там бэк разруливает - протух или нет токен, если не протух, то отдаёт 200 и я открываю приложения, дальше делаю запрос с токеном за данными пользователя, чтоб прогрузить их в приложение, если токен протух или его нет, то отправляю на авторизацию/регистрацию; 2) авторизация/регистрация - тут запрос прав доступа, если всё прошло успешно, то приходит 200, приложение открывается, токен сохраняется в LocalStorage, потом запрос за данными пользователя с токеном по урлу, данные приходят - приложение оживает с данными; 3) пользователь перемещается внутри приложения - я в хуках роутинге поверяю токен и по нему запрашиваю данные пользователя, если они нужны, если токен протух, то цикл входа повторяется;
Max
можно токен сохранять во Vuex, и к LocalStorage обращаться, если только во Vuex токена нет
Max
но задача такая, когда нажимаю F5, то идёт проверка токена, если его нет, то на страницу авторизация/регистрация, если он есть, то на стартовую страницу входа в приложение, а если я F5 нажал не на стартовой странице, то хочу после рефреша страницы остаться на этой же страницы, но меня перекидывает на стартовую
Max
как исправить поведения роутинге в таком случае?
akasybe
в первом сообщении ты все правильно расписал
Max
в первом сообщении ты все правильно расписал
с учётом того, что такой опыт первый у меня)
Sergey
Зачем если его нет регистрация строго?
Max
Зачем если его нет регистрация строго?
если токена нет, то регистрация/авторизация, а если токен есть, то состояние роутинге нужно как-то сохранить
akasybe
как исправить поведения роутинге в таком случае?
могу предположить, что у тебя хук роутинга выполняется раньше чем то место которое ты называешь "при входе в приложение", а это значит что ты не в том месте инициализируешь state vuex'а
Sergey
Если его нет и находишься в личном кабинете каком-то , то да
Max
могу предположить, что у тебя хук роутинга выполняется раньше чем то место которое ты называешь "при входе в приложение", а это значит что ты не в том месте инициализируешь state vuex'а
при входе в приложение, когда пользователь прошёл авторизацию, например, я пользователя перенаправляю на стартовый роут приложения, например на страницу - about
Max
но есть и страница prices, на которой я нажал F5, и происходит рефреш страницы, токен есть, соответственно меня перекидывает на страницу входа в приложение - about, а нужно сохранить состояние роутинга
Max
может в хуке компонента beforeDestroy сохранять в LocalStorage url?) но вроде как велосипедом пахнет)))
Roman
приветы!
Sergey
Ты че . Зачем Урал сохранять?
Max
приветы!
подключайся)
Sergey
Url
Roman
new Vue({ el: '#windows', data: { windows: {}, newUrl: '' }, methods: { addWindow: () => { this.windows.push({ url: this.newUrl }); this.newUrl = ''; }, removeWindow: () => { } } }); не вижу this.windows - почему?
Roman
за вуе сижу 15 минут
Max
Ты че . Зачем Урал сохранять?
а как сохранить стэйт роута при рефреше страницы?
akasybe
а как сохранить стэйт роута при рефреше страницы?
роутер определяет какой роут загрузить по урлу
Sergey
Во первых: что у тебя в this.$route ?
Roman
спасибо!
Roman
в объект то пуш делать
Sergey
Во вторых, не надо все Приложение переадресовывать. Ты сам и ответил
Max
у приложения есть урл входа, при получении прав доступа
Max
и при рефреше перекидывает на урл входа или страницу авторизации, в зависимости от наличия токена
Roman
а теперь после выполнения метода ничего не меняется на странице, хотя все реактивно должно быть. почему теперь я тупой?
Roman
const windowsApp = new Vue({ el: '#windows', data: { windows: {}, newUrl: '' }, methods: { addWindow: () => { this.windows[new Date().getTime().toString()] = { url: this.newUrl }; this.newUrl = ''; }, removeWindow: () => { } } });
Roman
new Date().getTime().toString() - для теста
Roman
чтобы никто не орал)
Sergey
Сори, не у компа. Не удобно. Создай правила в самом роутере
Sergey
В доках есть