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 санктум
Тут либо в документации что-то не договорили, то ли я не знаю.
Очень не хочется оставлять такого инвалида на аунтификации, а все таки сделать нормальную с возможностью выхода.
Если кто-то сталкивался с такой проблемой и как то ее решил, то буду рад узнать как.