nickola105
@nickola105
начинающий

Как проверить авторизован ли пользователь в приложении на Vue?

Делаю приложение и столкнулся с следующей задачей:
Скажем есть пункт меню "Профиль"
есть два представления данной страницы:

{ path: '/profile', component: ProfileViewsPage, children: [
        { path: '', component: LoginPage },
        { path: '', component: ProfilePage }

LoginPage - страница авторизации(регистрации)
ProfilePage - страница авторизованного пользователя с его данными

Как проверить авторизован ли пользователь в приложении или нет?
и в зависимости от ответа выдавать то или иное представление.
подозреваю что это нужно делать средством beforeEnter в path: '/profile', component: ProfileViewsPage
  • Вопрос задан
  • 5264 просмотра
Решения вопроса 2
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Мне кажется у вас не совсем верный подход, что если у вас будет множество путей, которые требуют авторизации? Один из вариантов добавить в роутер информацию требует данная страница авторизации или нет:
{ path: '/profile', component: ProfilePage requiresAuth: true,
{ path: '/login', component: LoginPageб requiresAuth: false }

Информация о том, что авторизован пользователь или нет должна сохраняться например в localStorage.

Далее в beforeEnter проверяете для страницы, на которую осуществляется переход, требуется ли авторизация для нее. Если да, то смотрим в localStorage, проверяем авторизован ли пользователь, если да, то переходим на страницу, если нет, то отправляем его на страницу авторизации. После успешной авторизации сохраняем, что пользователь авторизован в localStorage.
Также добавятся дополнительные условия, когда у вас протухает токен, по которому вы общаетесь с бэкендом.
Ответ написан
@nemoisfree
const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        здесь проверьте залогинен ли пользователь, если нет, то редиректите его на страницу логина
      }
    }
  ]
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Я сделал немного не по науке: просто глобально v-if="auth" показываю контент, а v-if="!auth" показываю форму логина. Тогда при заходе по ссылке (например присланной через скайп) на конкретную закрытую страницу пользователь получает окно авторизации, а при успешном логине - сразу же попадает на нужную страницу, и не надо нигде запоминать, что куда надо редиректить. Естественно, на стороне сервера также проверяется, залогинен пользователь, или нет.
Ответ написан
Комментировать
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Завести state, при загрузке страницы записать туда данные юзера(сразу при отдаче страницы или через отдельный запрос) и дальше проверять везде где надо любым способом.
или
Использовать api токен при запросах к бекенду. И так же при надобности получать полный профиль с бекенда(права доступа и т.д.) и дальше как в первом варианте.

Ну и в идеале оба варианта надо периодически проверять через бекенд на тухлость.

Вообще как угодно в рамках приложения, одного варианта нет правильного.
Вот пример с "глобальным сервисом" авторизации
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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