Search code examples
phplaravellaravel-5middleware

Redirect to Dashboard page by IP Address with Auth


I want to auto redirect to dashboard page by pass login page if client ip address are match ip address 192.168.1.154. But in my Dashboard page i already put session by Auth

My Middleware in kernel:

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,           
        'ipcheck' => \App\Http\Middleware\IpMiddleware::class,
    ];

My IpMiddleware code:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class IpMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // $ip = \Request::ip();
        if ($request->ip() == "192.168.1.154") {               
            return redirect('home');
        }
        return $next($request);
    }
}

My Route login:

Route::get('/', ['middleware' => ['ipcheck'], function () {
    return view('auth.login');
}]);

My Route home:

Route::get('home', function () {

    if (Auth::guest()) {
        return back()->withInput();
    } else (Auth::user()->role_id == 1) {

        return view('dashboard');
    } 

});

i got an error :

This webpage has a redirect loop

ERR_TOO_MANY_REDIRECTS

What can i do now?


Solution

  • You need to make auto login/session in you middleware not in dashboard

    Let say if you want autologin for id 1 then it should be like this

    public function handle($request, Closure $next)
    {
    // $ip = \Request::ip();
        if ($request->ip() == "192.168.1.154") {               
            $user_id = 1;//
            Auth::loginUsingId($user_id);
            return redirect('home');
        }
        return $next($request);
    }
    

    In your home route your check Auth which true for guest not for logged in user so it again redirect to auth.login because auth.login has middleware to redirect to home then home check for guest or Auth ..... and its make cicle and you got error

    This webpage has a redirect loop

    ERR_TOO_MANY_REDIRECTS