middleware keeps directing me to the login page

Viewed 45

I'm working on a website where I have designed an authentication system. The client logs in through email and password. If it is correct it should proceed to the dashboard and should not be able to go back to the login page as long as he/she is logged in. However, middleware keeps directing to the login page saying that 'you have to login first'. Both middleware are registered properly in kernel.php

Kernel.php

   protected $routeMiddleware = [
        'alreadyLoggedIn' => \App\Http\Middleware\AlreadyLoggedIn::class,
        'isLoggedIn' => \App\Http\Middleware\AuthCheck::class ];

Web.php

Route::post('/signin', [customAuthController::class,'loginClient']);
Route::get('/client',[customAuthController::class,'dashboard'])->middleware('isLoggedIn');
Route::get('/signin', [customAuthController::class, 'login'])->middleware('alreadyLoggedIn');
Route::get('/sign_up',[customAuthController::class,'registration'])>middleware('alreadyLoggedIn');

AlreadyLoggedIn (1st Middleware)

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;

class AlreadyLoggedIn
{
    /**
     * 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(Session()->has('loginId')&& (url('signin')==$request->url()|| url('sign_up')==$request->url()))
        return $next($request);
        return back();
    }
}

IsloggedIn (2nd Middleware)

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
class AuthCheck
{
    /**
     * 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(Session()->has('loginId'))
            return redirect('signin')->with('fail','You have to login first');
        return $next($request);
    }
}

customAuthCheck Controller

class customAuthController extends Controller
{
  public function dashboard(){
        $data = array();
        if(Session::has('loginId')){
            $data = client::where('id','=',Session::get('loginId'))->first();
        }
        return view('auth.client', compact('data'));
    }
    public function logout(){
        if(Session::has('loginId')){
            Session::pull('loginId');
            return redirect('signin');
        }
    }
}

https://github.com/faaiz99/web-tech-project

1 Answers

In your AuthCheck class (as you named it isLoggedIn in your kernel) first condition is not what you really want to check .

you want to redict user to login if hes not already logged in . so condition should be something like :

 if(!Session()->has('loginId')) 
 {
    return redirect('signin')->with('fail','You have to login first');
 }

addition : Its really better if you use laravel auth . i strongly suggest you to see laravel auth docs

with laravel authentication you can simply use auth facade in your middleware and that would be something like :

 if(!auth()->check()) 
 {
    return redirect('signin')->with('fail','You have to login first');
 }

Hope that helps .

Related