Я использую Laravel 5.3 и пытаюсь внедрить систему аутентификации. Я использовал команду php artisan
make:auth
для ее настройки. Я отредактировал представления в соответствии с моим макетом и перенаправил его на свою страницу панели управления вместо дома (по умолчанию задан в настройках). Теперь, когда я пытаюсь выйти из системы, он бросает мне эту ошибку
NotFoundHttpException in RouteCollection.php line 161
Мой код в маршрутах / 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 redirect path? но он не работает и показывает эти ошибки:
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
Решение, которое, как я считаю, работает лучше всего, переопределяет унаследованный метод «выхода», который вызывается из файла приложения / Http / Controllers / Auth / LoginController.php . Сделайте это, добавив следующий класс в этот класс:
/** * 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'); }
из/** * 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 logout
http post
вместо http get
. Вы можете выйти из почтового запроса, как Тейлор Отуэлл в 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>
из<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>
.<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» к маршруту «/» (home)
in /routes/web.php
добавить Route::get('/', function () { return view('home'); })->middleware('auth');
Разве это не самый простой способ?