Не могу выйти из пользовательской панели администратора Laravel 5.7

Мне понравилась панель администратора Matrix, поэтому я начал ее внедрять. Мне не понравилась возможность иметь администратора в модели пользователя (логическая проверка isAdmin), поэтому я создал отдельную модель под названием «Администратор». Я настроил все маршруты, и на моей тестовой странице администратора все работало со следующими маршрутами:

 web.php

Route::get('/admin/login', 'Auth\AdminLoginController@showLoginForm')- 
 >name('admin.login');
Route::post('/admin/login', 'Auth\AdminLoginController@login')- 
 >name('admin.login.submit');
Route::get('/admin', 'AdminController@index')->name('admin.admin');

This is my AdminLoginController:
 public function showLoginForm()
{
    return view('admin/admin-login');
}
protected function guard(){
    return Auth::guard('admin');
}

use AuthenticatesUsers;

protected $redirectTo = '/admin/login';

 public function __construct()
{
    $this->middleware('guest:admin')->except('logout');
}

And my AdminController:
public function __construct()
{
    $this->middleware('auth:admin');
}

public function index()
{
    return view('admin.admin');
}

I call routes in the view like this:
href="{{ route('admin.login') }}"

For some reason, it doesn't log me out and get me to the login page, instead it just refreshes the page, hence returns me to the /admin page with the admin logged in. What am i missing here? Thanks for all replies.

person Čendi    schedule 03.11.2018    source источник


Ответы (2)


В конструкторе для AdminLoginController вы установили промежуточное ПО как 'guest:admin'.

При этом используется гостевое промежуточное ПО, которое определено в /app/Http/Middleware/RedirectIfAuthenticated.php по умолчанию или настроено в /app/Http/Kernel.php.

Строка $guard, переданная для использования, равна 'admin'. Я предполагаю, что вы предоставляете реализацию для этой защиты admin.

Предположим, что вы вошли в систему как администратор, переход к route('admin.login') будет перенаправить ваш запрос на '/home' в реализации по умолчанию; вполне вероятно, что в вашей реализации существует пользовательское перенаправление на /admin.

Если вы хотите выйти из сеанса, вы можете зарегистрировать маршрут для метода logout, предоставленного в Illuminate\Foundation\Auth\AuthenticatesUsers черта.

Route::get('/admin/logout', 'AdminController@logout')->name('admin.logout');

Поскольку AuthenticatesUsers::logout по умолчанию перенаправляет на /, я предполагаю, что вам нужно переопределить это поведение. Вы можете сделать именно это, предоставив пользовательскую реализацию для AuthenticatesUsers::loggedOut в вашем контроллере.

protected function loggedOut(Request $request)
{
    return redirect('/admin');
}

Наконец, укажите этот маршрут для href в вашей ссылке {{ route('admin.logout') }}

person Oluwafemi Sule    schedule 03.11.2018
comment
Спасибо, Oluwafemi, я исправил это, добавив следующее: $this-›guard()-›logout(); $request-›session()-›invalidate(); return $this-›loggedOut($request) ?: redirect('/'); а затем сделать loggedOut для перенаправления на путь /admin/login, как я хотел. - person Čendi; 03.11.2018

Это все о сеансе,

  \Auth::logout();
    $request->session()->invalidate();
person tokkerbaz    schedule 03.11.2018