如何使用Laravel 5.4注销并重定向到登录页面?

2022-08-30 08:46:45

我正在使用Laravel 5.4并尝试实现身份验证系统。我使用php artisan命令make:auth来设置它。我根据我的布局编辑了视图。现在,当我尝试注销时,它会给我带来此错误

NotFoundHttpException in RouteCollection.php 161行:

任何人都可以帮我如何注销吗?


答案 1

在您的(路线)中:web.php

加:

Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');

在您的LoginController.php

加:

public function logout(Request $request) {
  Auth::logout();
  return redirect('/login');
}

另外,在 的顶部,之后LoginController.phpnamespace

加:

use Auth;

现在,您可以使用URL注销,或者如果您已经创建了,则将href添加到yourdomain.com/logoutlogout button/logout


答案 2

好吧,即使@Tauras的建议只是有效,我也不认为这是处理这个问题的正确方法。

您说您已经运行了,这应该也插入到您的路由文件中。它附带了已定义的默认路由,并命名为 。php artisan make:authAuth::routes();routes/web.phplogoutlogout

你可以在 GitHub 上看到它,但为了简单起见,我也会在这里报告代码:

    /**
     * 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');
    }

然后再次请注意,需要作为HTTP请求方法。这背后有很多有效的理由,但仅举一个非常重要的原因是,通过这种方式,您可以防止跨站点请求伪造logoutPOST

因此,根据我刚刚指出的正确实现方法,这可能只是这样的:

<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>

最后请注意,我已经插入了开箱即用的准备功能!{{ csrf_field() }}


推荐