Tim*_*Uum 45 php laravel laravel-5.3
在Laravel 5.3中注销后,是否没有优雅的解决方案重定向到特定页面?
被调用的函数来自特质AuthenticatesUsers:
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)
这是laravel核心的默认函数.所以我必须覆盖我无法编辑核心的整个功能.但是没有一个更简单的解决方案,因为手动注销,刷新和重新生成感觉有点过分.
Avr*_*ram 59
这就是我做到的.在Auth\LoginController中,您有:
use AuthenticatesUsers;
Run Code Online (Sandbox Code Playgroud)
将其更改为:
use AuthenticatesUsers {
logout as performLogout;
}
Run Code Online (Sandbox Code Playgroud)
然后,logout()在LoginController中定义一个新方法:
public function logout(Request $request)
{
$this->performLogout($request);
return redirect()->route('your_route');
}
Run Code Online (Sandbox Code Playgroud)
当然,logout()该特性中的常规方法只有3行(用于将用户登出系统),因此您可以将它们复制到您的方法中,但是您应该始终遵循DRY原则(不要重复自己)并重新使用尽可能多的代码.
Chr*_*ris 34
接受的答案很好,但您可以通过简单地覆盖loggedOut方法完全绕过触摸任何注销逻辑:
// App\Http\Controllers\Auth\LoginController.php
protected function loggedOut(Request $request) {
return redirect('/where/ever/you/want/to/go');
}
Run Code Online (Sandbox Code Playgroud)
Kal*_*nov 12
我会继承LoginController并覆盖logout来自该特征的函数:
LoginController.php - >保持原样.
MyLoginController.php:
class MyLoginController extends LoginController {
protected $redirectAfterLogout = '/goodbye';
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect($this->redirectAfterLogout);
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您应该记得相应地更新您的Auth路线.
我正在使用Laravel-5.2,我使用的是:
public function logout()
{
Auth::logout();
Session::flush();
return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)
确保您已导入:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
Run Code Online (Sandbox Code Playgroud)
在你的控制器中.
假设有人现在正在查看它,并且他们使用的 Laravel 版本是 5.7
在 LoginController.php 中添加这一行
public function logout()
{
Auth::logout();
return redirect()->to('/your-route');
}
Run Code Online (Sandbox Code Playgroud)
这假设您使用的是 laravel 提供的开箱即用的身份验证模块
laravel 5.3 中的 Auth::routes 方法为 /logout 注册了一个 POST 路由,而不是一个 GET 路由。这可以防止其他 Web 应用程序将您的用户从您的应用程序中注销。要升级,您应该将注销请求转换为使用 POST 动词,或者通过将此路由添加到文件 Routes/web.php 来为 /logout URI 注册您自己的 GET 路由:-
Route::get('/logout', 'Auth\LoginController@logout');
Run Code Online (Sandbox Code Playgroud)
它应该可以正常工作并将您重定向到“/”目录,因为它在 LoginController.php 中定义
引用自:-
https://laravel.com/docs/5.3/upgrade