如何设置laravel 5.3注销重定向路径?

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原则(不要重复自己)并重新使用尽可能多的代码.

  • @meduz'我不太清楚它的名字,我刚刚在PHP文档中找到它:https://www.php.net/manual/zh/language.oop5.traits.php#language.oop5。特质冲突 (2认同)
  • 唯一没有提到的是在 LoginController 中包含“use Illuminate\Http\Request;”。 (2认同)

Chr*_*ris 34

Laravel> 5.7

接受的答案很好,但您可以通过简单地覆盖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)

  • 可能是这里唯一的正确答案!确保控制器中包含了请求名称空间,即:use Illuminate \ Http \ Request;。 (3认同)
  • @Hatef对于laravel 5.7+很好,但是问题是在laravel 5.3中,这个答案是错误的。但这里有个好消息,因为很多人都会来到这里。 (3认同)

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路线.

  • 已经在用这个.但是不需要扩展LoginController,因为控制器是打开进行修改的.只需将方法添加到LoginController.因为该方法处于LoginController中使用的特征中.这似乎是解决方案,在事件内部不会触发重定向,因此事件不是一个选项 (3认同)

Sac*_*ith 7

我正在使用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)

在你的控制器中.


S. *_*eng 7

假设有人现在正在查看它,并且他们使用的 Laravel 版本是 5.7

在 LoginController.php 中添加这一行

public function logout()
{
    Auth::logout();
    return redirect()->to('/your-route');
}
Run Code Online (Sandbox Code Playgroud)

这假设您使用的是 laravel 提供的开箱即用的身份验证模块


Moh*_*abr 5

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