Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Q8Xbox's avatar

Target class [Middleware\AdminAuthenticated] does not exist.

since i change my routes syntax and use command "php artisan optimize:clear" i got an error related to admin role since user role works fine for me but not sure what the issue with admin since i use this tutorial to do login roles so i hope someone can clarify this issue for me in order to fix it. tutorial link: https://learn2torials.com/a/laravel8-authentication-based-on-roles full path for AdminAuthenticated.php is: projectfolder/app/Http/Middleware/AdminAuthenticated​.php

AdminAuthenticated​.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\UsersList;
use Illuminate\Support\Facades\Auth;

class AdminAuthenticated​
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('user') ) {
                return redirect(route('dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('admin') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error
    }
}

UserAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\UsersList;
use Illuminate\Support\Facades\Auth;
use App\Providers\RouteServiceProvider;

class UserAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin_dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('user') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error
    }
}

RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use App\Models\UsersList;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                /** @var User $user */
                $user = Auth::guard($guard);

                // to admin dashboard
                if($user->hasRole('admin')) {
                    return redirect(route('admin_dashboard'));
                }

                // to user dashboard
                else if($user->hasRole('user')) {
                    return redirect(route('dashboard'));
                }
            }
        }

        return $next($request);
    }
}

AuthenticatedSessionController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {
        $request->authenticate();

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

        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin_dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('user') ) {
                return redirect(route('dashboard'));
            }
        }

        /*return redirect()->intended(RouteServiceProvider::HOME);*/
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

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

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

        return redirect('/');
    }
}

Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array<int, class-string|string>
     */
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'user' => \App\Http\Middleware\UserAuthenticated::class,
        'admin' => \App\Http\Middleware\AdminAuthenticated::class,
    ];
}

web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UsersListController;
use App\Http\Controllers\CategoriesListController;
use App\Http\Controllers\SubCategoriesListController;
use App\Http\Controllers\PostsListController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
})->name('welcome');

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/users', 'DisplayUsers')->name('usersList');
    Route::get('/users/add', 'AddUser')->name('AddUser');
    Route::post('/users/add', 'StoreUser')->name('StoreUser');
    Route::get('/users/edit/{id}', 'EditUser')->name('EditUser');
    Route::post('/users/update/{id}', 'UpdateUser')->name('UpdateUser');
    Route::post('/users/delete/{id}', 'DeleteUser')->name('DeleteUser');
});

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/categories', 'DisplayCategories')->name('categoriesList');
    Route::post('/categories/add', 'AddCategory')->name('AddCategory');
    Route::post('/categories/update/{id}', 'UpdateCategory')->name('UpdateCategory');
    Route::post('/categories/delete/{id}', 'DeleteCategory')->name('DeleteCategory');
});

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/subcategory', 'DisplaySubCategories')->name('subCategoriesList');
    Route::get('/getcategories', 'GetCategories')->name('GetCategories');
    Route::post('/subcategory/add', 'AddSubCategory')->name('AddSubCategory');
    Route::post('/subcategory/update/{id}', 'UpdateSubCategory')->name('UpdateSubCategory');
    Route::post('/subcategory/delete/{id}', 'DeleteSubCategory')->name('DeleteSubCategory');
});

Route::controller(UsersListController::class)->middleware(['auth', 'user'])->prefix('user')->group( function () {
    Route::get('/posts', 'DisplayPosts')->name('postsList');
    Route::get('/getsubcategories', 'GetSubCategories')->name('GetSubCategories');
    Route::get('/posts/add', 'AddPost')->name('AddPost');
    Route::post('/posts/add', 'StorePost')->name('StorePost');
    Route::get('/posts/edit/{id}', 'EditPost')->name('EditPost');
    Route::post('/posts/update/{id}', 'UpdatePost')->name('UpdatePost');
    Route::post('/posts/delete/{id}', 'DeletePost')->name('DeletePost');
});

// USER DASHBOARD
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'user'])->name('dashboard');

// ADMIN DASHBOARD
Route::get('/admin_dashboard', function () {
    return view('dashboardAdmin');
})->middleware(['auth', 'admin'])->name('admin_dashboard');

require __DIR__.'/auth.php';
0 likes
6 replies
vincent15000's avatar

Why don't you extend the middleware class with extends Middleware ?

Snapey's avatar

try saying what the problem is!

presumably the way you assign roles prevents someone being BOTH admin AND user ?

Q8Xbox's avatar

Ok, Let me explain what i'm trying to achieve here. I have a site where admin have it own panel in order to add/modify users, news, categories & sub categories for the site in addition for that i would like to allow users ( web site visitor ) to submit there own project in order for admin to review them after that approve the proper project to be presented in site. In order to do that i want the normal user to be able to register and take a default and assign default value "user" in role column in users_lists table so after login he should be directed to user panel where he can submit his own project or edit it only ( not other users ).

My main issue here that after login i was able to redirect to user panel but when i logout and try login using admin role it display the error i mentioned before:

Target class [App\Http\Middleware\AdminAuthenticated] does not exist.

Note: I can share the complete project just to understand the issue i'm facing to get to know how the flow works exactly but it is little too big around 240MB in size.

Snapey's avatar
Snapey
Best Answer
Level 122

check that your file names and classnames match exactly ( same lettercase) then run composer dump

1 like
Q8Xbox's avatar

@Snapey I have run this command but it did not help after rename the middleware file to AdminAuth.php and class to same name and it works fine so why it did not work before using name AdminAuthenticated ?

Edit: Now rename it back to AdminAuthenticated and works fine too...?!

rodrigo.pedra's avatar

@Q8Xbox

so you probably had a mismatch between file name and class name..

As we discussed in the previous thread.

Sometimes it is so small it is hard to see and our eyes trick us.

Glad you got it working. Kudos to @snapey who finally got you to test a suggestion =)

1 like

Please or to participate in this conversation.