Я прочитал, что использование запроса get для выхода из системы может привести к атаке csrf, поэтому я хочу реализовать запрос post для выхода из системы.
Вот что я сделал в сети. php
Route::redirect('/', '/it');
Route::group(['prefix' => '{locale?}'], function () {
Route::get('/','HomeController@index')->name('/');
...
Route::get('/admin/dashboard', 'AdminViewController@index')->name('dashboard')->middleware('auth')
...
Route::get('/contact', 'ContactController@index')->name('contact');
// Route::get('logout', function()
// {
// auth()->logout();
// Session()->flush();
// return Redirect::to('/');
// })->name('logout');
Auth::routes();
});
Я знаю, что люди говорят, чтобы удалить Auth из группы, но для меня это хорошо.
Вот что у меня в AuthRouteMethods, который автоматически создает:
<?php
namespace Laravel\Ui;
use Illuminate\Support\Facades\Route;
class AuthRouteMethods
{
public function auth()
{
return function ($options = []) {
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
if ($options['register'] ?? true) {
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
}
// Password Reset Routes...
if ($options['reset'] ?? true) {
$this->resetPassword();
}
// Password Confirmation Routes...
if ($options['confirm'] ??
class_exists($this->prependGroupNamespace('Auth\ConfirmPasswordController'))) {
$this->confirmPassword();
}
// Email Verification Routes...
if ($options['verify'] ?? false) {
$this->emailVerification();
}
};
}
public function resetPassword()
{
return function () {
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');
};
}
public function confirmPassword()
{
return function () {
$this->get('password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm');
$this->post('password/confirm', 'Auth\ConfirmPasswordController@confirm');
};
}
public function emailVerification()
{
return function () {
$this->get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
$this->get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify');
$this->post('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
};
}
}
и в пользовательском интерфейсе у меня есть эта реализация:
<li><a href="{{ route('logout', app()->getLocale()) }}" onclick="event.preventDefault(); document.getElementById('loggout-form').submit();">Logout</a>
</ul>
</div>
<form id="loggout-form" {{ route('logout', app()->getLocale()) }} method="POST" style="display:none;">
@csrf
</form>
и когда я запускаю вызов, я получил эту ошибку:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
**The POST method is not supported for this route. Supported methods: GET, HEAD.**