繁体   English   中英

如何使用Laravel 5.3注销并重定向到登录页面?

[英]How to logout and redirect to login page using Laravel 5.3?

我正在使用Laravel 5.3并尝试实现身份验证系统。 我使用php artisan命令make:auth来设置它。 我根据我的布局编辑了视图,并将其重定向到我的仪表板页面而不是主页(在设置中设置为默认值)。 现在,当我尝试注销时,它会把这个错误抛给我

NotFoundHttpException in RouteCollection.php line 161

我在routes / web.php中的代码是:

Auth::routes();

Route::get('/pages/superadmin/dashboard', 'HomeController@index');

HomeController.php

<?php

 namespace App\Http\Controllers;

 use Illuminate\Http\Request;

 class HomeController extends Controller
 {
/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth');
}

/**
 * Show the application dashboard.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    return view('dashboard');
}
}

Auth / Login Controller.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/dashboard';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}
}

我尝试了此页面上的解决方案: 如何设置laravel 5.3 logout重定向路径? 但它没有工作并显示这些错误:

 ReflectionException in Route.php line 339:
 Class App\Http\Controllers\Auth\Request does not exist

我想将其重定向到auth /文件夹中的登录页面。

我终于在LoginController.php中添加了这一行来解决这个问题

 protected $redirectAfterLogout = 'auth/login';

并编辑此文件\\ vendor \\ laravel \\ framework \\ src \\ Illuminate \\ Foundation \\ Auth \\ AuthenticatesUsers.php如果您未在此文件中提供$ redirectAfterLogout,它将使用默认的'/'。 你也可以在github上找到它。 链接就在答案的最后。

public function logout()
 {
  return redirect(property_exists($this, 'redirectAfterLogout') ? $this- >redirectAfterLogout : '/');
}

你也可以在这里查看: https//github.com/laravel/framework/commit/aa1204448a0d89e2846cbc383ce487df6efd9fc8#diff-b72935cc9bfd1d3e8139fd163ae00bf5

希望它可以帮助某人。

谢谢

如果您想继续使用GET注销

Route::get('logout', 'Auth\LoginController@logout');

要么

Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');

在Laravel 5.4中测试过

我认为最好的解决方案是覆盖从app / Http / Controllers / Auth / LoginController.php文件中调用的继承的“logout”方法。 通过向此类添加以下方法来执行此操作:

/**
 * Log the user out of the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function logout(Request $request)
{
    $this->guard()->logout();

    $request->session()->flush();

    $request->session()->regenerate();

    return redirect('/login');
}

由于“LoginController”类继承自Illuminate \\ Foundation \\ Auth \\ AuthenticatesUsers ,您应该能够安全地覆盖此方法(在LoginController中)而不编辑实际的供应商文件本身...编辑AuthenticatesUsers文件或任何供应商文件如果您想要升级,会导致重大问题...

这里唯一的另一步是你需要在LoginController类的顶部包含以下行:

use Illuminate\Http\Request;

在Laravel 5.3中, logouthttp post而不是http get 您可以通过发布请求注册,例如Taylor Otwell do auth scaffolding。

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

<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
    {{ csrf_field() }}
</form>

将注销操作重定向到登录页面意味着除非用户通过身份验证,否则站点中没有可用的页面。

我不是上面提到的触及供应商目录的忠实粉丝。 确实,Laravel 5.4 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AutenticateUser->logout()重定向到'/' 没有可用于更改它的参数。 所以,让我们保持这种方式,只需在路线'/'(主页)添加'auth protection'

/routes/web.php添加Route::get('/', function () { return view('home'); })->middleware('auth');

这不是最简单的方法吗?

适用于laravel 5.6
File => app / Http / Controllers / Auth / LoginController.php

use Illuminate\Http\Request;

class LoginController extends Controller
{
    ...  ...  ...
    ...  ...  ...
    ...  ...  ...

    /**
     * Log the user out of the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */

    public function logout(Request $request)
    {
         $this->guard()->logout();
         $request->session()->flush();
         $request->session()->regenerate();
         return redirect('/login');
    }
}

感谢虚拟机械师回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM