500 ошибка при попытке выхода с аккаунта vue3 laravel sanctum

Я написал форму аунтификации, у меня работают вход, регистрация и получение пользователя, но у меня не работает logout, пользователь может зайти в аккаунт, но выйти уже не может.

Чтобы я не пытался менять, но все равно ловлю 500 ошибку и такой лог в laravel: Method Illuminate\Auth\RequestGuard::logout does not exist.

Я посмотрел несколько обсуждений на счет этой проблемы на различных форумах, но там ничего и не помогло, но за то теперь я даже не понимаю, а могу ли я вообще в sanctum для SPA выйти с аккаунта.

Файл api.php:

Route::middleware(['web'])->group(function () {
Route::post('/login', LoginController::class)->name('login');
Route::post('/register', RegisterController::class)->name('register');
Route::post('/logout', LogoutController::class)->middleware('auth:sanctum');
Route::get('/user', GetUserController::class)->middleware('auth:sanctum');

});

Контроллер для выхода:

public function __invoke(Request $request)
{
    Auth::guard("web")->logout();
    $request->session()->invalidate();
    $request->session()->regenerateToken(); 

    return response()->json(['message' => 'Logged out']);
}

И на фронте в pinia такой код:

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
import axios from 'axios';

axios.defaults.baseURL = 'http://localhost:8000';
axios.defaults.withCredentials = true;
axios.defaults.withXSRFToken = true;

export const useAuthStore = defineStore('auth', () => {
  const user = ref(null);

  const getCsrfToken = async () => {
    await axios.get('/sanctum/csrf-cookie');
  };

  const login = async (email, password) => {
    try {
      await getCsrfToken(); // получаем CSRF токен
      await axios.post('/api/login', { email, password });
      await getUser(); // получаем информацию о пользователе
    } catch (error) {
      console.error('Login error', error);
      throw error;
    }
  };

  const register = async (name, email, password) => {
    try {
      await getCsrfToken();
      await axios.post('/api/register', { name, email, password });
    } catch (error) {
      console.error('Registration error', error);
      throw error;
    }
  };

  const logout = async () => {
    try {
      // await getCsrfToken();
      const response = await axios.post('/api/logout');
      console.log('Ответ от API:', response);
      user.value = null;
    } catch (error) {
      console.error('Logout error', error);
      throw error;
    }
  };


  const getUser = async () => {
    try {
      await getCsrfToken();
      const response = await axios.get('/api/user');
      user.value = response.data;
      console.log(user.value);
    } catch (error) {
      console.error('Get user error', error);
      user.value = null;
    }
  };

  const isAuthor = computed(() => user.value?.role === "author");
  const isAdmin = computed(() => user.value?.role === "admin");

  return {
    user, isAuthor, isAdmin,
    login, register, logout, getUser,
  };
})

Я сделал все, как написано в документации laravel санктум

Тут либо в документации что-то не договорили, то ли я не знаю.

Очень не хочется оставлять такого инвалида на аунтификации, а все таки сделать нормальную с возможностью выхода.

Если кто-то сталкивался с такой проблемой и как то ее решил, то буду рад узнать как.


Ответы (0 шт):