PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как сделать авторизацию Laravel + Sanctum + Vue (SPA)?

Привет, запутался с sanctum, делаю SPA на vue.
Прочитал доку, добавил middleware, настроил переменные, на vue набросал форму, автоизуюсь.

нагуглил мануал, решил делать по нему, примерно такие шаги:

1) настроил vue-router на проверку vuex переменной isAuth (есть авторизация или нет)
2) установил SESSION_DRIVER=cookie
3) сперва делаю запрос get на /sanctum/csrf-cookie - и установка csrf
4) потом делаю запрос post на api/login - там авторизуюсь через Auth::attempt
5) в ответ приходит юзер (id, name...)
6) сохраняю юзера во vuex (localStorage) isAuth = true

все окей, работает, хожу по закрытым роутам, так как из vuex берется инфа что юзер авторизован и в самом же vuex сохранен, поэтому везде пускает

Но я не понимаю зачем так... и как иначе, проблема в тот что на фронте авторизация хранится внутри vuex хранилища, а запросы к api обернуты в auth:sanctum и там идет проверка куков

Отсюда вопрос, что будет если авторизация протухла, а у нас на фронте она "активна" isAuth = true

Я взял поставил SESSION_LIFETIME = 1 минута, авторизовался, кука есть, isAuth = true есть, жду 1 минуту, сессия(кука) протухает....
Все, у меня запросы на /api/** разворачивает 'auth:sanctum' сессия закончилась, а фронтент об этом и не знает, у него из localStorage (vuex) isAuth = true

Что делать, что я не понимаю, может у вас есть пример репозитория где best practices vue + laravel sunctum
а то я дичь какую-то гуглю (типа такой https://medium.com/techvblogs/spa-authentication-u...)
  • Вопрос задан
  • 584 просмотра
Пригласить эксперта
Ответы на вопрос 1
dima9595
@dima9595
Junior PHP
Не знаю правильно ли я так делал, но в моём проекте:
1. Когда пользователь не авторизован - мало по каким роутам мог ходить. Стандартный middleware.
2. Когда пользователь авторизован и у него меняется роут - он делает запрос на получение данных авторизованного пользователя. Если ответ мы получаем пользователя - мы обновляем данные в хранилище (vuex), а если его нет, то сбрасываем авторизацию на фронте и редиректим его на страницу авторизации/или ни чего не делаем, если это позволяет роут.
Ответ написан
Ваш ответ на вопрос

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

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