Не могу выйти из пользовательской панели администратора Laravel 5.7 - PullRequest
0 голосов
/ 03 ноября 2018

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

 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.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Это все о сессии,

  \Auth::logout();
    $request->session()->invalidate();
0 голосов
/ 03 ноября 2018

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...