2016-10-18 6 views
3

Я использую Laravel 5.3 и пытаюсь внедрить систему аутентификации. Я использовал команду php artisanmake:auth для ее настройки. Я отредактировал представления в соответствии с моим макетом и перенаправил его на свою страницу панели управления вместо дома (по умолчанию задан в настройках). Теперь, когда я пытаюсь выйти из системы он бросает мне эту ошибкуКак выйти из системы и переадресовать ее на страницу входа в систему с помощью Laravel 5.3?

NotFoundHttpException in RouteCollection.php line 161 

Мой код в маршрутах/web.php является:

Auth::routes(); 

Route::get('/pages/superadmin/dashboard', '[email protected]'); 

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']); 
} 
} 

Я попытался решения на этой странице: How to set laravel 5.3 logout redirect path?, но он не работает и показывает эти ошибки:

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

Я хочу, чтобы перенаправить его на страницу входа, которая находится в папке/Идент.

ответ

0

В Ларавеле 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> 
2

я, наконец, решить эту проблему, добавив следующую строку в моей LoginController.php

protected $redirectAfterLogout = 'auth/login'; 

и редактирование этого файла \ поставщика \ Laravel \ Framework \ Src \ Осветите \ 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

Надеется, что это поможет кому-то.

Спасибо

+1

Спасибо, он работал для меня! – Vinny

+0

Одна из проблем заключается в том, что если вы используете git, папка поставщика не контролируется версией, так что вместо этого вы можете скопировать содержимое функции выхода из системы на ваш LoginController, а затем, когда вы выйдете из системы, она отправится туда вместо папки в пакете поставщика –

+0

Я настоятельно рекомендую не редактировать файлы поставщиков. Я отправлю свое решение ниже. –

2

Если вы хотите продолжать использовать GET для выхода

Route::get('logout', 'Auth\[email protected]'); 

или

Route::get('logout', '\App\Http\Controllers\Auth\[email protected]'); 
0

Перенаправление действие выхода на страницу входа значит для меня нет страницы в сайт доступен, если пользователь не аутентифицирован.

Я не большой поклонник касания поставщика, как указано выше. Это правда, Laravel 5.4 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AutenticateUser->logout() перенаправляет на '/'. Для его изменения нет параметров.Итак, давайте держать его таким образом и просто добавить «защиту» аутентификации на маршрут «/» (дом)

в /routes/web.php добавить Route::get('/', function() { return view('home'); })->middleware('auth');

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

2

Испытано в Laravel 5.4

Решение, которое я считаю, работает лучше всего это переопределение унаследованного «отключала» метод, который вызывается внутри приложения/Http/Контроллеры/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'); 
} 

В классе «LoginController» наследует от Осветите \ Foundation \ Auth \ AuthenticatesUsers, вы должны безопасно иметь возможность переопределить этот метод (в LoginController) БЕЗ редактирования фактического поставщика самого файла ... редактирование AuthenticatesUsers файла или любого поставщика файла будет вызывать серьезные головные боли вниз по дороге, если вы когда-нибудь хотели, чтобы обновить ...

единственный дополнительный шаг здесь является то, что вам нужно включить следующую строку вверху из LoginController класса:

use Illuminate\Http\Request;