Laravel 5.4 kullanıyorum ve kimlik doğrulama sistemini uygulamaya çalışıyorum. Kurmak için php artisan komutu make:auth kullandım. Görünümleri düzenime göre düzenledim. Şimdi, oturumu kapatmaya çalıştığımda bana şu hatayı veriyor
RouteCollection.php satır 161'de NotFoundHttpException:
biri bana nasıl çıkış yapacağıma yardım edebilir mi?
Web.php`nizde (rotalar):
ekle:
Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
LoginController.php
dosyanızda
ekle:
public function logout(Request $request) {
Auth::logout();
return redirect('/login');
}
Ayrıca, LoginController.php
dosyasının üst kısmında, namespace
öğesinden sonra
ekle:
use Auth;
Artık yourdomain.com/logout
URLsini kullanarak çıkış yapabilirsiniz veya ``logout button`` oluşturduysanız, href
i /logout
adresine ekleyin
Tauras tarafından önerilen şey işe yarasa bile, bununla başa çıkmanın doğru yolu olduğunu düşünmüyorum.
Php artisan make:authçalıştırdığınızı söylediniz, bu da
routes/web.phpyönlendirme dosyalarınıza
Auth::routes();eklemiş olmalıdır. Zaten tanımlanmış ve
logoutolarak adlandırılmış varsayılan
logout` rotası ile birlikte gelir.
Burada GitHub'da görebilirsiniz**]1, ancak basitlik için kodu burada da bildireceğim:
/**
* Register the typical authentication routes for an application.
*
* @return void
*/
public function auth()
{
// 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...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$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');
}
Sonra tekrar lütfen logout
un HTTP istek yöntemi olarak POST` gerektirdiğini unutmayın. Bunun arkasında birçok geçerli neden vardır, ancak sadece çok önemli bir tanesinden bahsetmek gerekirse, bu şekilde siteler arası istek sahteciliğini önleyebilirsiniz.
Bu nedenle, az önce belirttiklerime göre, bunu uygulamanın doğru bir yolu sadece şu olabilir:
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('frm-logout').submit();">
Logout
</a>
<form id="frm-logout" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
Son olarak, laravel'in hazır fonksiyonunu {{ csrf_field() }}
eklediğimi unutmayın!