【发布时间】:2017-08-22 14:16:53
【问题描述】:
我的顶部导航栏中有一个“注销”链接。我想知道如何做到这一点,以便在我登录时,当我点击它并返回主页时,它会注销我。
具体来说,我在 Laravel 中对哪些文件进行了哪些更改?另外,我需要在当前仅包含 HTML 的视图中编写什么代码来触发此操作?
【问题讨论】:
我的顶部导航栏中有一个“注销”链接。我想知道如何做到这一点,以便在我登录时,当我点击它并返回主页时,它会注销我。
具体来说,我在 Laravel 中对哪些文件进行了哪些更改?另外,我需要在当前仅包含 HTML 的视图中编写什么代码来触发此操作?
【问题讨论】:
当你运行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>
【讨论】:
@csrf 替换{{ csrf_field() }}
于 2019 年 12 月 28 日编辑:可行,但此答案包含严重的安全问题。使用前请三思。 Lucas Bustamante 的答案也许是更好的选择。请参阅此答案的评论部分。
1) 如果您使用的是 laravel 包含的 auth 脚手架。你可以这样做,在你的导航栏中添加这个:
<a href="{{ url('/logout') }}"> logout </a>
然后将其添加到您的 web.php 文件中
Route::get('/logout', '\App\Http\Controllers\Auth\LoginController@logout');
完成。这将注销您并重定向到主页。要获取 auth 脚手架,请从命令行 cd 到您的项目根目录并运行
php artisan make:auth
2) 将此添加到您的导航栏:
<a href="{{ url('/logout') }}"> logout </a>
然后将其添加到您的 web.php 文件中
Route::get('/logout', 'YourController@logout');
然后在 YourController.php 文件中,添加这个
public function logout () {
//logout user
auth()->logout();
// redirect to homepage
return redirect('/');
}
完成。
阅读:
https://mattstauffer.co/blog/the-auth-scaffold-in-laravel-5-2
https://www.cloudways.com/blog/laravel-login-authentication/
【讨论】:
使用logout() 方法:
auth()->logout();
或者:
Auth::logout();
要将用户从您的应用程序中注销,您可以使用
Auth门面的logout方法。这将清除用户会话中的身份验证信息。
【讨论】:
return redirect('/');
如果你想使用 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>
【讨论】:
正如接受的答案提到通过 GET 注销有副作用,你应该使用 Laravel auth 已经创建的默认 POST 路由。
只需创建一个小表单并通过链接或按钮 HTML 标记提交:
<form action="{{ route('logout') }}" method="POST">
@csrf
<button type="submit">
{{ __('Logout') }}
</button>
</form>
【讨论】:
如果你使用guard,你可以使用这行代码注销:
Auth::guard('you-guard')->logout();
【讨论】:
在 laravel 8.x 中
@csrf <x-jet-dropdown-link href="{{ route('logout') }}"
onclick="event.preventDefault();
this.closest('form').submit();">
{{ __('Logout') }}
</x-jet-dropdown-link>
</form>
【讨论】: