我的顶部导航栏中有一个“注销”链接。我想知道如何才能做到这一点,以便在我登录时,当我单击它时它会将我注销并返回到主页。
具体来说,我要对 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>
编辑于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');
完成。这将使您注销并重定向到主页。要获取身份验证脚手架,请从命令行 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();
要让用户退出您的应用程序,您可以使用
外观上的logout
方法。这将清除用户会话中的身份验证信息。Auth
如果您想使用 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>
如果你想使用 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>