0
votes

I have this Laravel app II'm adding middleware for restricting user based on userType:

Middleware/Client.php:

    <?php

namespace App\Http\Middleware;
use Auth;
use Closure;

class Client
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
       // $user = $request->user();
       
        if (Auth::check() && Auth::user()->userType == 1) {
        return $next($request);
        }
        else {
        return redirect('/');
        }
    }
}

I also added this in kernel.php:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
    'usertype' => \App\Http\Middleware\UserType::class,
    'client' => \App\Http\Middleware\Client::class,
    'staff' => \App\Http\Middleware\Staff::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
];

but it's not working when I add this client in web.php:

Route::get('/client_profile','Client\ClientController@getclientdetails')->middleware('client');

It's going in else condition if I login. I tried printing $user but its returning null

update:

Route::get('/client_dashboard', function(){
  return view('client.dashboard');
 })->middleware('client');

authenticate.php:

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('admin.login');
    }
}

Note: I have 3 userType, 2 user staff and client working on api and admin is using basic Laravel auth

1
You can do the same on AppServiceProvidersta
try middleware('auth:client');void
middleware('client') working but auth::check and user not workingafk
are you logged in when you request /client_profile ?Makdous
when i'm not loggedin it redirect to / but when i try to login it still redirect to /afk

1 Answers

-1
votes

Auth::check() && Auth::user() Will only work if you are authenticated (logged in).

If you are trying to use Auth::check() && Auth::user() in a Middleware while:

  1. not logged in

  2. trying to log in

It will not work because the request hasn't reached the required function to authenticate your log in request.

Only use the client Middleware when your logged in or else it will not work.