Intereting Posts
Выполнение php-фантомных js работает, но casperjs не разрешает работу разрешено Пытаясь получить свойство не-объекта в Как проверить адрес электронной почты в PHP file_exists () не работает codeigniter PHP-скрипт: код вредоносного JavaScript в конце Настройка переменных среды со встроенным веб-сервером PHP добавление символа для всех элементов массива ap art из последнего использования для / foreach $ _FILES Empty При загрузке Что такое @ в объекте? Как получить данные POST, отправленные с использованием «application / octet-stream» в PHP? Как создать параметризованное заявление об обновлении базы данных в Yii для предложения IN ()? Как я могу отформатировать номер только для отображения 1 десятичной точки в php? PHP: Правильный способ объявить переменную перед использованием в цикле Symfony2 ParamConverter не связан с @Annotation (кеш должен быть очищен после любого изменения файла) L5 random TokenMismatchExceptions

Как выйти из системы и переадресовать ее на страницу входа в систему с помощью Laravel 5.3?

Я использую 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');

Разве это не самый простой способ?