Выход из системы не работает в мульти аутентификации в laravel 5.8 - PullRequest
1 голос
/ 27 января 2020

Я реализовал мульти-аутентификацию в приложении, и все работает нормально, кроме выхода администратора. Я пытаюсь защитить маршрут admin.logout, используя метод кроме (), но он не работает, выполняет гостевое промежуточное ПО и перенаправляет на панель мониторинга. Видел список маршрутов, а в маршруте admin.logout есть еще guest: admin middleware. Я пытаюсь выйти из администратора с помощью функции контроллера метода adminLogout в AdminLoginController, но это не выход администратора. вот картинки моего кода. Так, как решить эту проблему выхода администратора?

auth. php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'admin-api' => [
            'driver' => 'token',
            'provider' => 'admins',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ]
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

Web. php

//login routes for users
Route::get('/login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('/login', 'Auth\LoginController@login');
Route::post('/logout', 'Auth\LoginController@logout')->name('logout');

// routes for admin
Route::prefix('admin')->namespace('Admin')->group(function () {
    Route::get('login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
    Route::post('login', 'Auth\AdminLoginController@adminLogin');
    Route::post('logout', 'Auth\AdminLoginController@adminLogout')->name('adminlogout');
    Route::post('hello', 'Auth\AdminLoginController@hello')->name('adminHello');

    Route::group(['middleware' => ['role:admin']], function(){
        Route::get('setting', 'AdminController@adminSetting');
        Route::get('dashboard', 'AdminController@adminDashboard')->name('admin.dashboard');
        Route::get('customers', 'AdminController@customers');
    });
});

AdminLoginController. php

<?php

namespace App\Http\Controllers\Admin\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Spatie\Permission\Models\Role;
use App\Admin;

class AdminLoginController extends Controller
{

    use AuthenticatesUsers;
    protected $redirectTo = '/home';

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

    public function showLoginForm(){
        return view('auth.admin.adminLogin');
    }

    public function adminLogin(Request $request)
    {
        $this->validate($request, [
            'email'   => 'required|email|exists:admins',
            'password' => 'required|min:6'
        ]);
        if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember'))) {
            $request->session()->regenerate();

            return redirect()->intended('/admin/dashboard');
        }
        return back()->withInput($request->only('email', 'remember'));
    }
    public function adminLogout(Request $request)
    {
        Auth::guard('admin')->logout();

        $request->session()->invalidate();

        return redirect('/admin/login');
    }
}

, когда я вижу весь список маршрутов, используя php кустарный маршрут: список , он показывает Мне этот enter image description here

admin / logout Маршрут все еще имеет гостя: промежуточное ПО администратора, и он не защищает мой маршрут администратора / выхода из системы гостя: промежуточное ПО администратора и выполнения RedirectIfAuthenticated промежуточное ПО, даже если я добавлю этот маршрут в метод exc () в AdminLoginController. Пожалуйста, решите, как выйти из системы администратора?

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