Search code examples
phplaravelauthenticationmiddlewarelaravel-5.1

Using Laravel Auth middleware


Laravel 5.1 really had minimal documentation.. I need clear idea about how to protect routes using Auth middileware..

Documentation tells to add "middleware" => "auth" parameter to route. or can do

    public function __construct() 
    {
      $this->middleware('auth');
    }

But How to use Auth middleware for actual user authentication and auto redirection to /login from protected routes ??


Solution

  • In Kernel.php - there are registered middlewares under protected $routeMiddleware like this:

    /**
     * The application's route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => 'App\Http\Middleware\Authenticate',
        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
        'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
    ];
    

    You can see 'auth' is registered for using App\Http\Middleware\Authenticate.

    Then you can follow this path - if you open /app/Http/Middleware/Authenticate.php, you will find public function handle:

        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if ($this->auth->guest())
            {
                if ($request->ajax())
                {
                    return response('Unauthorized.', 401);
                }
                else
                {
                    return redirect()->guest('auth/login');
                }
            }
    
            return $next($request);
        }
    

    and here is where redirection is managed, and you can modify it for your own needs, or you can create custom middleware.

    finally - as it is written in documentation - in the controller, which will need to be authenticated, you will add

    public function __construct() 
    {
      $this->middleware('auth');
    }
    

    You can create a custom middleware if provided ones do not suit your needs.