При выходе из приложения я не могу повторно войти, потому что я получаю ошибку 419.Но это только пока я не очистил кеш браузеров.После перезагрузки страницы с помощью CTRL + F5 в Chrome (очищает кеш) я могу войти без проблем.
У меня есть внешний интерфейс Vue.JS и внутренний интерфейс Laravel.Они находятся в одном домене, поэтому я решил поместить маршруты API в веб-файл, как кто-то сказал мне в этом комментарии:
При выходе из системы я выполняю действие, при котором создается сообщениезапрос на мой маршрут выхода из системы:
export function logout() {
return new Promise((res, rej) => {
axios
.post('/auth/logout')
.then(response => {
res(response.data);
})
.catch(err => {
rej(err);
})
})
}
Вот мои маршруты:
Route::group(['prefix' => 'api', 'middleware' => 'auth:web'], function () {
Route::get('memory', 'MemoryController@index');
Route::put('memory/favorite', 'FavoriteController@update');
Route::get('memory/{id}', 'MemoryController@show');
Route::post('friend/add', 'FriendshipController@sendRequest');
});
Route::group(['prefix' => 'auth'], function () {
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
Route::post('register', 'Auth\RegisterController@register');
});
Route::get('/{any}', 'SinglePageController@index')->where('any', '.*');
И это мой LoginController:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
use AuthenticatesUsers {
logout as performLogout;
}
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/timeline';
public function logout(Request $request)
{
Auth::logout();
$this->performLogout($request);
return redirect('/');
}
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
Я думаю, это что-тоделать со способом, которым я настроил свои Vue и Laravel, потому что я использую это как SPA, и это действительно не обновляет страницу?Я прав, думая об этом, или у него есть другая причина?Потому что эта ошибка возникает только тогда, когда я выхожу и пытаюсь войти снова, не обновляя мой кеш.Я что-то пропускаю в своем контроллере?
Обновление: Кажется, что я также иногда получаю эту ошибку 419, когда нажимаю кнопку выхода из системы.Ошибка выглядит следующим образом:
POST http://127.0.0.1:8000/auth/logout 419 (неизвестный статус)
Я не думаю, что это как-то связано с не отправкойCSRF-токен с запросом, потому что у меня есть этот кусок кода в моем bootstrap.js:
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
Таким образом, каждый запрос должен содержать заголовок CSRF.