通过Laravel中的链接注销

Ben*_*Kao 11 logout navbar laravel

我的顶部导航栏中有一个"注销"链接.我想知道我怎么能这样做,以便在我登录时,当我点击它并将我返回主页时它会将我注销.

具体来说,我在Laravel中对哪些文件进行了哪些更改?另外,我需要在视图中编写哪些代码(目前只包含HTML)才能触发此代码?

Luc*_*nte 23

当你运行时php artisan make:auth,Laravel 5.5中的默认app.php就像这样:

<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
    Logout
</a>

<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
    {{ csrf_field() }}
</form>
Run Code Online (Sandbox Code Playgroud)

  • 这是您应该在 Laravel 中注销的正确方式。接受的答案并不能防止跨站点请求伪造(尽管将某人注销可能不是您最关心的问题,您应该以正确的方式这样做)。 (2认同)
  • 对于 Laravel 5.6 及以上版本,您可以使用 `@csrf` 替换 `{{ csrf_field() }}` (2认同)

小智 20

1)如果您使用laravel包含的auth脚手架.你可以这样做,在你的导航栏中添加:

<a href="{{ url('/logout') }}"> logout </a>
Run Code Online (Sandbox Code Playgroud)

然后将其添加到您的web.php文件中

Route::get('/logout', '\App\Http\Controllers\Auth\LoginController@logout');
Run Code Online (Sandbox Code Playgroud)

完成.这将退出并重定向到主页.要从命令行获取auth脚手架,请cd进入项目根目录并运行

php artisan make:auth 
Run Code Online (Sandbox Code Playgroud)

2)将其添加到导航栏:

<a href="{{ url('/logout') }}"> logout </a>
Run Code Online (Sandbox Code Playgroud)

然后在web.php文件中添加它

Route::get('/logout', 'YourController@logout');
Run Code Online (Sandbox Code Playgroud)

然后在YourController.php文件中添加它

public function logout () {
    //logout user
    auth()->logout();
    // redirect to homepage
    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)

完成.

读:

https://mattstauffer.co/blog/the-auth-scaffold-in-laravel-5-2
https://www.cloudways.com/blog/laravel-login-authentication/
Run Code Online (Sandbox Code Playgroud)

  • 哇,这是大不对。您应该具有一个提交带有CSRF令牌字段的发布请求的表单。允许通过GET请求注销允许任何网站注销您! (3认同)
  • @ColinLaws我同意这是一个禁忌,除了您所说的原因之外,还有另一个原因:某些浏览器在您访问页面时会预先缓存页面上的链接,这可能会导致您仅通过访问带有以下内容的页面就可以注销那个链接。请参阅 stackoverflow.com/a/14587231/2778502 (2认同)

Ale*_*nin 7

使用logout()方法:

auth()->logout();
Run Code Online (Sandbox Code Playgroud)

或者:

Auth::logout();
Run Code Online (Sandbox Code Playgroud)

要将用户从您的应用程序中注销,您可以使用Facadelogout上的方法Auth。这将清除用户会话中的身份验证信息。


eyl*_*lay 6

如果你想使用 JavaScript:

<a href="javascript:void" onclick="document.getElementById('logout-form').submit();">
    Logout
</a>

<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
    @csrf
</form>
Run Code Online (Sandbox Code Playgroud)

如果你想使用 jQuery 而不是 JavaScript:

<a href="javascript:void" onclick="$('#logout-form').submit();">
    Logout
</a>

<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
    @csrf
</form>
Run Code Online (Sandbox Code Playgroud)