Для реализации авторизации в Laravel с использованием пакета Sanctum и фреймворка Vue для разработки SPA, необходимо выполнить несколько шагов. Они включают настройку backend-части (Laravel) и frontend-части (Vue).
Шаг 1: Настройка backend-части (Laravel)
- Установите Laravel, создайте новый проект с помощью команды
composer create-project --prefer-dist laravel/laravel project-name
. - Установите пакет Sanctum, выполнив команду
composer require laravel/sanctum
. - Зарегистрируйте пакет Sanctum, добавив
LaravelSanctumSanctumServiceProvider::class
в список провайдеров в файлеconfig/app.php
. - Опубликуйте конфигурацию Sanctum, выполните команду
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
. - Создайте аутентификацию пользователя, используя
php artisan make:auth
.
Шаг 2: Настройка frontend-части (Vue)
- Установите Vue CLI, если еще не установлено, командой
npm install -g @vue/cli
. - Создайте новый проект Vue с помощью команды
vue create project-name
. - Введите
cd project-name
, чтобы перейти в директорию проекта. - Установите необходимые пакеты с помощью команды
npm install axios vue-router
. - Создайте компоненты для авторизации, например,
Login.vue
,Register.vue
,Dashboard.vue
.
Шаг 3: Настройка маршрутизации и API
- В файле
app/Http/Kernel.php
добавьтеuse LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful;
и'api' => [ EnsureFrontendRequestsAreStateful::class, 'throttle:120,1', IlluminateRoutingMiddlewareSubstituteBindings::class, ],
вprotected $middlewareGroups
.
- В файле
routes/api.php
добавьте маршрут для получения токена Sanctum:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
- Создайте маршруты для авторизации в файле
routes/web.php
:
Route::view('/{any}', 'spa')->where('any', '.*');
- Создайте файл
resources/js/routes.js
и добавьте маршруты:
import Vue from 'vue'; import VueRouter from 'vue-router'; import Login from './components/Login.vue'; import Register from './components/Register.vue'; import Dashboard from './components/Dashboard.vue'; Vue.use(VueRouter); const routes = [ { path: '/login', component: Login, meta: { guestOnly: true }, }, { path: '/register', component: Register, meta: { guestOnly: true }, }, { path: '/dashboard', component: Dashboard, meta: { authOnly: true }, }, ]; const router = new VueRouter({ mode: 'history', routes, }); router.beforeEach((to, from, next) => { if (to.matched.some(route => route.meta.authOnly)) { if (!window.auth) { return next('/login'); } return next(); } if (to.matched.some(route => route.meta.guestOnly)) { if (window.auth) { return next('/dashboard'); } return next(); } return next(); }); export default router;
- В файле
resources/js/app.js
добавьте следующий код для работы с Sanctum, маршрутизации и хранилища:
import Vue from 'vue'; import App from './components/App.vue'; import axios from 'axios'; import VueAxios from 'vue-axios'; import router from './routes'; axios.defaults.withCredentials = true; Vue.use(VueAxios, axios); Vue.router = router; Vue.prototype.$auth = window.auth; Vue.component('app', App); const app = new Vue({ el: '#app', router, });
Шаг 4: Настройка компонентов Vue
- В компоненте
Login.vue
добавьте метод для отправки запроса на авторизацию:
methods: { login() { axios.post('/login', { email: this.email, password: this.password, }) .then(response => { // Успешная авторизация this.$router.push('/dashboard'); }) .catch(error => { // Ошибка авторизации }); }, },
- Добавьте метод для получения данных пользователя в компоненте
Dashboard.vue
:
created() { this.$axios.get('/api/user') .then(response => { // Получение данных пользователя this.user = response.data; }) .catch(() => { // Ошибка получения данных пользователя }); },
- Добавьте кнопку выхода в компоненте
Dashboard.vue
:
methods: { logout() { axios.post('/logout') .then(response => { // Успешный выход из системы this.$router.push('/login'); }) .catch(error => { // Ошибка при выходе из системы }); }, },
Шаг 5: Запуск приложения
- Запустите миграции базы данных с помощью команды
php artisan migrate
. - Запустите Laravel сервер с помощью команды
php artisan serve
. - В другом терминале перейдите в директорию frontend-части (
cd project-name
) и запустите приложение Vue командойnpm run serve
. - Откройте браузер и перейдите по URL http://localhost:8080 (либо другой адрес, который вы указали в настройках Vue CLI).
Теперь у вас должно быть полностью рабочее авторизационное приложение Laravel + Sanctum + Vue (SPA).